$同时观察多个属性并仅触发一次回调

2023-12-26

我想知道在评估指令的所有(或仅某些)属性(没有隔离范围)后是否可以仅执行一次回调。属性非常适合将配置传递给指令。问题是您可以单独观察每个属性并多次触发回调。

在示例中,我们有一个没有隔离范围的指令,它观察两个属性:名称和姓氏。任何更改后action回调被触发:

html

<button ng-click="name='John';surname='Brown'">Change all params</button>
<div person name="{{name}}" surname="{{surname}}"></div>

js

angular.module('app', []).

directive('person', function() {
  return {
    restrict: 'A',
    link: function($scope, $elem, $attrs) {
        var action = function() {
          $elem.append('name: ' + $attrs.name + '<br/> surname: ' + $attrs.surname+'<br/><br/>');
        }
        $attrs.$observe('name', action);
        $attrs.$observe('surname', action);
    }
 }
});

Plunker here http://plnkr.co/edit/uZMbRzVZHj9sMWL9MJ9H.

所以效果就是一键改名字和姓氏后,action回调被触发两次:

name: 
surname: Brown

name: John
surname: Brown

那么问题来了:可以action姓名值更改后仅被解雇一次?


您可以使用$watch评估自定义函数而不是特定模型。

i.e.

$scope.$watch(function () {
  return [$attrs.name, $attrs.surname];
}, action, true);

这将在所有$digest循环,并且如果$watch检测到返回数组(或者您想要构造函数的返回值)与旧值不匹配,回调参数$watch会火。如果您确实使用对象作为返回值,请确保保留true最后一个参数的值$watch以便$watch会做一个深入的比较。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

$同时观察多个属性并仅触发一次回调 的相关文章

随机推荐

  • 在哪些移动平台上,“推送令牌”不是永久的?

    我们都知道 为了在任何移动平台上使用推送通知功能 我们需要一个称为 推送令牌 的唯一标识符 开发人员需要以某种方式将该 令牌 保存到他的服务器上 以便能够向用户发送通知 然而 在哪些移动平台上 这个 令牌 将保持永久 并且在哪些移动平台上可
  • 如何在 Scala 中找到列表中最大值的索引?

    对于 Scala List Int 我可以调用方法 max 来查找最大元素值 如何找到最大元素的索引 这就是我现在正在做的事情 val max list max val index list indexOf max 一种方法是使用索引压缩列
  • 如何使用 Flexbox 将菜单居中[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个二行菜单 我想使用 Flexbox 将其居中 我是 Flexbox 新手 有几个问题 当我在 DreamWeaver CS6
  • 我可以将 Django 模型中的至少一个字段作为要求吗?

    假设我有一个 Person 模型 class Person models Model name models CharField max length 50 email models EmailField telephone models
  • 有没有可以重新格式化 cmake 文件的实用程序

    我有相对复杂的 cmake 文件 我想知道是否有任何实用程序可以重新格式化 cmakeList txt 并美化它以便于阅读 一些简单的技巧就可以完成这项工作 例如缩进 if else endif 部分等等 有这样的工具吗 我使用notepa
  • R中的叠加直方图

    我想根据位置绘制长度直方图 我试图覆盖直方图 其中一个位置的数据是一种颜色 而另一个位置的数据是不同的颜色 这是我到目前为止仅绘制直方图的 R 代码 fasta lt read csv fastadata csv header T nort
  • 逐块迭代加载图像,其中块部分重叠

    尝试处理大型卫星图像 10GB 为了有效地处理图像块 block tile 在每次迭代中被加载到内存中 其示例代码如下 def process image src img dst img band id 1 with rasterio op
  • Swift:通过身份查找数组

    swift 中的 find 函数仅支持查找项相等 我想按身份查找项目 例如 鉴于此设置 class A let first A let last A let absent A let array first last 我希望能够做类似的事情
  • 如何在 SQLite 数据库中存储 JSON 对象

    如何在 SQLite 数据库中存储 JSON 对象 正确的方法是什么 其中一处是 blob 类型列 如果我可以将 JSON 对象转换为字节数组并使用 Fileoutputstream 另一个想法是将文本列存储为字符串 import org
  • dpkg:处理存档时出错(安装 Nodejs 时)

    安装nodejs时出现这个错误 https i stack imgur com JMRiT jpg https i stack imgur com JMRiT jpg https i stack imgur com JMRiT jpg 我正
  • 通过 JupyterLab 的链接在当前工作区中打开笔记本

    我需要使用 降价 链接从另一个笔记本打开一个笔记本 但我不想在另一个浏览器选项卡中打开链接的笔记本 相反 它应该在当前的 JupyterLab 工作区 会话中打开 I tried http localhost 8888 lab tree p
  • 精确匹配字符串

    仅当文本完全匹配时才匹配的正则表达式 如果重要的话 在 JavaScript 中 是什么 也就是说 字符串的另一端不应有多余的字符 例如 如果我想匹配abc then 1abc1 1abc and abc1不会匹配 使用开始和结束分隔符 a
  • 无法使 C++ Boost 指针序列化工作

    此问题与重复列出的问题不同 Boost C 序列化 char https stackoverflow com questions 5094750 boost c serializing a char我没有使用shared ptr 并且我可以
  • 在 bash 脚本中使用 ssh 密钥

    我已经设置了从服务器 A 到服务器 B 的 ssh 密钥 并且无需密码即可登录服务器 B 我正在尝试在 bash 脚本中设置反向 ssh 隧道 如果我这样做的话 从命令行 ssh N R 1234 localhost 22 email pr
  • 如何修复npm审计报告

    当我运行 npmaudit 命令时 npm 审计安全报告 Manual Review Some vulnerabilities require your attention to resolve Visit https go npm me
  • .net 文化特定的 12/24 小时格式

    有没有办法保留文化特定的日期时间格式 但强制 12 24 小时渲染 我知道我可以使用实际的日期 时间格式字符串做很多事情 例如HH mm ss and hh mm ss但我想尊重当前的用户文化格式 即mm dd yyyy or yyyy m
  • 图像渲染测试

    我正在对自定义浏览器进行基准测试 并希望对相同文件大小的不同类型图像 gif jpg png 的渲染速度进行基准测试 以了解该浏览器渲染哪种图像格式最快 我的过程只是为每种类型的图像创建一个简单的单独 HTML 页面 并在渲染之前和之后使用
  • 将 EJB 转换为 JSON Web 服务

    我已将 EJB 3 1 转变为 Web 服务 现在我需要创建 JSON Web 服务来与 JavaScript 组件进行通信 JavaScri t 组件将使用 JSON 版本的接口与系统通信并获取所需的数据 由于性能原因 我不能使用 XML
  • 自定义 Java 类加载器未用于加载依赖项?

    我一直在尝试设置一个自定义类加载器来拦截类以打印出哪些类正在加载到应用程序中 类加载器看起来像这样 public class MyClassLoader extends ClassLoader Override public Class
  • $同时观察多个属性并仅触发一次回调

    我想知道在评估指令的所有 或仅某些 属性 没有隔离范围 后是否可以仅执行一次回调 属性非常适合将配置传递给指令 问题是您可以单独观察每个属性并多次触发回调 在示例中 我们有一个没有隔离范围的指令 它观察两个属性 名称和姓氏 任何更改后act