javascript – scope.$watch在angular指令中不起作用

我已经制作了一个自定义指令并使用了ng-model,但是当模型更新时,该指令即使我正在观看该事件.这是代码:

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
        };
    }
}}]);

和观点:

<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时,视图都不会更新.

解决方法

默认情况下,将旧值与新值进行比较时,将检查“参考”相等性.但如果你需要检查价值,那么你需要这样做,

scope.$watch('ngModel',oldVal) {
    render();
},true);

但是这里的问题是angular会深入监视ngModel的所有属性以进行更改.如果ngModel变量是一个复杂的对象,它将影响性能.你可以做到这一点来避免这种情况只检查一个属性,

scope.$watch('ngModel.someProperty',true);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)