首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >有没有一种方法可以监视从AngularJS之外触发的属性更改?

有没有一种方法可以监视从AngularJS之外触发的属性更改?
EN

Stack Overflow用户
提问于 2013-06-18 02:23:46
回答 2查看 9.7K关注 0票数 7

我试图理解角世界和非角世界之间的相互作用。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dir1 id="d1" attr1="100"/>

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$("#d1").attr("attr1", 1000);

指令如何知道它的一个属性已经改变?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-18 02:43:24

最好是在指令中进行此更改。如果,无论出于什么原因,这是不可能的,那么有几个选择。

在应用程序外部,获取对应用程序内任何DOM元素的引用。使用该引用,您可以获得对其作用域的引用。您可以使用id为d1的元素。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var domElement = document.getElementById('d1');
var scope = angular.element(domElement).scope();

以下是几个选项:

选项1

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scope.myvalue = attrs.attr1;

然后,您可以在应用程序外部更改该值(使用上面对范围的引用),如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scope.$apply(function(){
    scope.myvalue = 1000;
    console.log('attribute changed');
});

Here is a fiddle

选项2

如果视图是直接使用jQuery操作的,我不知道$observe$watch或与属性的隔离范围绑定是否有效,因为它们都绑定到属性表达式本身,只在第一次运行链接函数时绑定一次。更改该值将导致这些绑定失败。因此,您必须对DOM元素本身执行$watch属性(而不是通过attrs):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scope.$watch(function(){         
    return $(el).attr('attr1');    // Set a watch on the actual DOM value
}, function(newVal){
    scope.message = newVal;
});

然后,您可以在应用程序外部更改该值(使用上面对范围的引用),如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scope.$apply(function(){
    $("#d1").attr("attr1",1000);
});

Here is a fiddle

票数 8
EN

Stack Overflow用户

发布于 2014-06-20 19:59:44

使用Web组件库,如x-tags by MozillaPolymer by Google。此选项不会在每次属性更改时大量调用$scope.$apply

我使用x-tag是因为它们支持更广泛的浏览器。在定义新的自定义标记(指令)时,您可以将选项lifecycle.attributeChanged设置为回调函数,该函数将在每次参数更改时触发。

The official docs不是很有帮助。但通过反复试验和深入代码,我设法找出了它是如何工作的。

回调函数的上下文( this对象)就是元素本身。属性已更改的对象。回调可以接受三个参数:

  • name -属性的名称,
  • oldValue and
  • newValue -它们不言而喻。

所以现在,进入正题:

代码

这将监视属性的更改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xtag.register('dir1', {
    lifecycle: {
        attributeChanged: function (attribute, changedFrom, changedTo) {
            // Find the element's scope
            var scope = angular.element(this).scope();

            // Update the scope if our attribute has changed
            scope.$apply(function () {
                if (attribute == 'attr1') scope.style = changedTo;
            });
        }
    }
});

attributeChanged回调仅在参数的值实际发生变化时触发。要获得它们的初始值,您需要手动扫描批次。最简单的方法似乎是在定义指令时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myApp.directive('dir1', function () {
    return {
        ... ,
        link: function (scope, element, attributes) {
            scope.attr1 = element[0].getAttribute('attr1');
        }
    };
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17159652

复制
相关文章
vue监视属性
在Vue.js中,监视属性(Watch Property)是一种用于观察数据变化并执行相应操作的技术。通过监视属性,您可以监听指定数据的变化,并在数据发生变化时执行特定的逻辑。
堕落飞鸟
2023/05/20
4590
再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结
ng-bind 单向数据绑定($scope -> view),用于数据显示,简写形式是 {{}}。
周陆军
2018/08/02
7.9K0
jquery实现点击某元素之外触发事件
<script> $(function(){ $(document).click(function (e) { if (!$(e.target).is('.program_rooms')) { $(".room_change").slideUp('slow'); $(".program_rooms").attr("data-sure","0"); }
山河木马
2019/03/05
2.8K0
如何更改github工程的语言属性
当创建github项目的时候,github本身会根据提交文件的数量来自动推断工程的开发语言,有时这种推断结果会与实际情况不太相符。
Python疯子
2018/09/06
3.4K0
触发浏览器回流的属性方法一览表
下列的所有属性、方法,在读取或执行的同时,将会导致浏览器同步地计算样式和布局。这种行为又叫做回流,也是常见的性能瓶颈。
Tiffany_c4df
2019/09/04
1.6K0
AngularJS面试常见问题汇总
脏检查机制。 双向数据绑定是 AngularJS 的核心机制之一。当 view 中有任何数据变化时,会更新到 model ,当 model 中数据有变化时,view 也会同步更新,显然,这需要一个监控。 原理就是,Angular 在 scope 模型上设置了一个监听队列,用来监听数据变化并更新 view 。每次绑定一个东西到 view 上时 AngularJS 就会往 $watch 队列里插入一条 $watch ,用来检测它监视的 model 里是否有变化的东西。当浏览器接收到可以被 angular context 处理的事件时, $digest 循环就会触发,遍历所有的 $watch ,最后更新 dom。
生南星
2019/07/22
2.1K0
A左右ndroid正在使用Uri监视数据库中的更改
在监控数据库在线原创文章是非常小的变化,基本上没有找到一个实际的问题。所以,如果你看到一个有点蓝牙源代码,写一个Demo。在这里,供大家参考,查看源代码:
全栈程序员站长
2022/07/06
3.5K0
软件打包,有没有更好的方法?!
最近,一位朋友分享了关于亚马逊内部构建系统(https://gist.github.com/terabyte/15a2d3d407285b8b5a0a7964dd6283b0)的设计要点,这也让我对于软件打包这事有了新的认识。
深度学习与Python
2023/10/16
2390
软件打包,有没有更好的方法?!
前端三大框架vue,angular,react大杂烩
摘要:从angular的诞生独步天下,到现在三大框架平分天下,基本形势已经趋于稳定。每一个框架从诞生到受欢迎,都有其特定的原因和背景。不同的开发者选择时,也是依据于其特定情景下的原因和背景。 一、为什么前端会被vue,angular,react瓜分?    不知道大家有没有发现,这三个框架除了都是前端框架之外,还大有搞基的成分存在。注意他们三个的名字,分别以v,a,r 开头,我这么一说,你是不是忽然间就想到了什么。哈哈,正是如此,将他们组合起来不就是javascript中无处不在的鬼东西么?var
企鹅号小编
2018/01/16
2.1K0
前端三大框架vue,angular,react大杂烩
摘要:从angular的诞生独步天下,到现在三大框架平分天下,基本形势已经趋于稳定。每一个框架从诞生到受欢迎,都有其特定的原因和背景。不同的开发者选择时,也是依据于其特定情景下的原因和背景。 一、为什么前端会被vue,angular,react瓜分?    不知道大家有没有发现,这三个框架除了都是前端框架之外,还大有搞基的成分存在。注意他们三个的名字,分别以v,a,r 开头,我这么一说,你是不是忽然间就想到了什么。哈哈,正是如此,将他们组合起来不就是javascript中无处不在的鬼东西么?var
企鹅号小编
2018/01/16
3K0
关于 title 属性导致触发 mousedown 事件时连带触发 mousemove
  大家都知道,鼠标点击的整个事件的执行流程是:mousedown -> mouseup -> click ,而拖放的整个流程是:mousedown -> mousemove -> mouseup -> click
胡尐睿丶
2022/03/28
1.3K0
oracle可以更改表名,sql – 更改Oracle表名
CONSTRAINT ORDER_SOURCE_PK PRIMARY KEY(OS_ID)
全栈程序员站长
2022/08/30
1.8K0
这个dataframe,有没有好的方法,可以转化成这样一个dataframe
前几天在Python白银交流群【空翼】问了一个pandas处理Excel数据的问题,提问截图如下:
Python进阶者
2023/03/02
8240
这个dataframe,有没有好的方法,可以转化成这样一个dataframe
【17】进大厂必须掌握的面试题-50个Angular面试
Angular是一个开放源代码的前端Web框架。它是最流行的JavaScript框架之一,主要由Google维护。它提供了一个轻松开发基于Web的应用程序的平台,并使前端开发人员能够管理跨平台应用程序。它集成了强大的功能,例如声明性模板,端到端工具,依赖项注入以及各种其他使开发路径更流畅的最佳实践。
全栈程序员站长
2021/04/07
41.5K0
编程,到底有没有捷径可以走
编程处在一个前所未所有的向上增长期,少儿编程的普及越来越的进入中小学生群体,以前只能在大学里才能学到的技能,转而从小学校园里开始,想想看,等他们就业时会是一个什么样的状态。一个人人编程的社会即将到来。
MavenTalker
2020/05/16
6010
Linux中的Chattr命令更改文件属性
在Linux中,文件属性是描述文件行为的元数据属性。 例如,属性可以指示是否压缩文件或指定是否可以删除文件。
用户5005176
2021/08/10
3.7K0
Oracle EBS的新漏洞可以更改财务记录
Oracle解决了其电子商务套件(EBS)业务管理解决方案中的两个安全漏洞,这些漏洞可能使攻击者能够进行广泛的恶意活动,包括篡改组织的财务记录。
FB客服
2020/06/29
1.1K0
Oracle EBS的新漏洞可以更改财务记录
​从 JS 文件分析到 XSS 的一种方法
在研究其他漏洞赏金计划时,在 cmp3p.js 文件中发现了跨站点脚本漏洞,该漏洞允许攻击者在包含上述脚本的域上下文中执行任意 javascript 代码。
信安百科
2023/10/02
3660
​从 JS 文件分析到 XSS 的一种方法
点击加载更多

相似问题

AngularJS监视属性更改

10

AngularJS:监视服务属性更改

15

有没有一种方法可以处理UIToolbar之外的所有操作?

15

是否有一种方法可以访问类之外的属性?

51

有没有一种方法可以监视PostgreSQL中的所有ddl脚本?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文