AngularJS:观察/观察属性的改变
AngularJS : watch/observe attribute change
我想通过它的id更新元素的属性,并让元素对这个变化做出反应。
我试着创建一个plunkr来反映我的情况,但在那里我似乎连ng-click都不能工作。
然而,我想做的是调用一个函数来执行以下操作
var cell = angular.element(document.querySelector('#' + cellName));
cell.attr('card-id', id);
似乎可以工作,根据这些值,我可以在这些行之后直接读出。
接收元素看起来像这样:
deckbuilderApp.directive('card', function() {
return {
restrict: 'E',
replace: true,
templateUrl: 'tpl/deckCard.tpl.html',
scope: {
cardId: '=cardId'
},
link: function(scope, element, attrs) {
attrs.$observe('cardId', function(newId) {
console.log('observe cardId: new Value: ' + newId);
console.log('observe cardId: id: ' + scope.id + ' scope:' + scope);
});
scope.$watch('cardId', function(oldValue, newValue) {
console.log('$watch cardId: ' + oldValue + ' -> ' + newValue);
});
attrs.$observe(function() { return attrs.cardId }, function(newId) {
console.log('ssssobserve card-id: new Value: ' + newId);
console.log('sssssobserve card-id: id: ' + scope.id + ' scope:' + scope);
});
scope.$watch(function() { return attrs.cardId }, function(oldValue, newValue) {
console.log('sssssssssss$watch card-id: ' + oldValue + ' -> ' + newValue);
});
console.log('linked card directive');
}
}
});
当我通过ng-repeat设置值时,watch和observer函数(除了'ssssobserver')在初始化时被调用。
对card-id属性的后续更改不会触发手表或观察者代码。
我需要做什么才能使它工作?
这里有很多事情会阻止它工作。我给出的主要建议是更好地学习Angular的使用习惯(也许是更多的教程),并把jQuery的做事方式从你的脑海中清除掉。Angular为你提供了一个通过javascript完成几乎所有事情的路径,所以如果你发现自己在操纵DOM元素,请退一步,尝试不同的东西。
最明显的改进是使用Angular内置的消息传递工具,而不是试图通过操纵DOM来滚动你自己的工具。Angular为这些目的提供了$rootScope.$on
、$rootScope.$broadcast
和$rootScope.emit
。
还有双向绑定的概念,这是不可能的替换,因为你已经尝试在你的plunkr。我已经分叉了另一个,并使其正常工作,所以看看你可以如何做不同的。
http://plnkr.co/edit/eqZQ0iptzKAInEYxEyLp?p =
预览这绝不是"理想的"代码——只是功能性的。继续努力学习工具集,你就会很好。
相关文章:
- knockoutjs可观察数组
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 多次发射多个可观察器的问题
- jQuery:当屏幕大小改变时,如何更改默认图像和悬停图像
- 未激发路由的控制器属性上的观察者
- 为什么使用immutableJS我的状态没有改变
- 无法在关闭弹出窗口时传递可观察的数据
- JavaScript改变了双方的显示风格
- Knockout:在改变可观察数组后设置select的标题
- 变异观察者- DOM被回调函数改变
- 改变指令模板内的值并观察变化
- KnockoutJS:模板不会在可观察数组改变时更新(只在添加时更新,在删除时有效)
- Knockout.js |可观察数组只在最后一个元素改变时触发
- 如何检查剑道观察改变
- 可观察值更新只会改变一个绑定元素,而不会改变另一个
- 找出哪个事件/观察者正在改变元素
- AngularJS:观察/观察属性的改变
- 只有当某个属性改变时才订阅可观察对象
- 观察一个变量值,当它改变时采取一些行动
- 确定是否在计算中改变了可观察对象