加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 有没有办法观察从角度世界外部触发的属性变化?

发布时间:2020-12-17 10:18:35 所属栏目:安全 来源:网络整理
导读:我试图理解角度世界和非角度世界之间的相互作用. 给出一个声明如下的指令: dir1 id="d1" attr1="100"/ 如果angular之外的代码以这种方式更改指令: $("#d1").attr("attr1",1000); 指令怎么知道它的一个属性已经改变了? 最好在指令中进行此更改.如果由于某
我试图理解角度世界和非角度世界之间的相互作用.

给出一个声明如下的指令:

<dir1 id="d1" attr1="100"/>

如果angular之外的代码以这种方式更改指令:

$("#d1").attr("attr1",1000);

指令怎么知道它的一个属性已经改变了?

最好在指令中进行此更改.如果由于某种原因,这是不可能的,那么有几种选择.

在应用程序之外,获取对应用程序中任何DOM元素的引用.使用该引用,您可以获得对其范围的引用.您可以使用id为d1的元素.例如:

var domElement = document.getElementById('d1');
var scope = angular.element(domElement).scope();

这里有几个选项:

选项1

修改模型,而不是直接更改视图.在link函数中,将初始属性值存储在范围变量中,如:

scope.myvalue = attrs.attr1;

然后你可以改变应用程序之外的值(使用上面对范围的引用),如:

scope.$apply(function(){
    scope.myvalue = 1000;
    console.log('attribute changed');
});

Here is a fiddle

选项2

如果使用jQuery直接操作视图,我不知道使用$observe,$watch或者绑定到可以工作的属性的隔离范围,因为它们都绑定到属性表达式本身,只有一次,当链接功能首先运行.更改该值将导致这些绑定失败.所以你必须$在DOM元素本身上观察属性(而不是通过attrs):

scope.$watch(function(){         
    return $(el).attr('attr1');    // Set a watch on the actual DOM value
},function(newVal){
    scope.message = newVal;
});

然后你可以改变应用程序之外的值(使用上面对范围的引用),如:

scope.$apply(function(){
    $("#d1").attr("attr1",1000);
});

Here is a fiddle

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读