首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >范围。$watch不能在角指令中工作。

范围。$watch不能在角指令中工作。
EN

Stack Overflow用户
提问于 2015-06-16 08:49:23
回答 1查看 5.1K关注 0票数 3

我已经做了一个定制指令,并且使用了ng模型,但是当模型更新时,即使我在观察事件,指令也不会。下面是代码:

代码语言:javascript
复制
angular.module('Directives').directive("customDirective", ['$window', function ($window) {

return {
    restrict: "E",
    require: 'ngModel',
    scope: {
        ngModel: '=',
    },
    link: function (scope, elem, attrs, ngModel) {

        // IF the model changes, re-render
        scope.$watch('ngModel', function (newVal, oldVal) {
            render();
        });

        // We want to re-render in case of resize
        angular.element($window).bind('resize', function () {
            //this does work
            render();
        })

        var render = function () {
            //doing some work here
        };
    }
}}]);

意见如下:

代码语言:javascript
复制
<div ng-repeat="product in pageCtrl.productList track by product.id">
<h3>{{ product.name }}</h3>
<custom-directive ng-model="product.recentPriceHistory">
    &nbsp;
</custom-directive>

每当向产品recentPriceHistory添加新值时,视图都不会更新。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-16 08:55:49

默认情况下,当比较旧值和新值角时,将检查“引用”相等性。但是如果你需要检查这个值,那么你需要这样做,

代码语言:javascript
复制
scope.$watch('ngModel', function (newVal, oldVal) {
    render();
}, true);

但是这里的问题是角将深入观察ngModel的所有属性以了解变化,如果ngModel变量是一个复杂的对象,它将影响性能。你能避免的就是只检查一个属性,

代码语言:javascript
复制
scope.$watch('ngModel.someProperty', function (newVal, oldVal) {
    render();
}, true);
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30862831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档