angularJS scope。$ watch整个对象

邦戈

是否可以在angularJS中观看整个对象?

我创建了一个插件来向您展示我的意思:http ://plnkr.co/edit/QxLzbwKkJ5k50DiP8OP1

当我更改RG或B值时,颜色对象不会触发更改事件,仅触发RG或B值。我可以自己触发一个事件,以便我知道整个对象已更改吗?

除了代码外,这里还有代码:

function ColorObject()
{
    this.r = 0;
    this.g = 0;
    this.b = 0;

    this.c = 0;
    this.m = 0;
    this.y = 0;
    this.k = 0;

    this.hex = "#ff0000";
    this.oppositeHex = "#00ffff";
}

var chColorChanger = angular.module('chColorChanger',[]);

chColorChanger.controller('chColorChangerCtrl', function ($scope,$document,$element) 
{     
    $scope.colors = new ColorObject();
    $scope.gMessage = 0;
    $scope.message = 'scope initialized';
});

chColorChanger.directive('chColorValue',['$document',function($document) {
    return {
        link: function (scope, elem, attrs) {

            scope.$watch('colors',function(newValue,oldValue){
               scope.gMessage++;
            });

            scope.$watch('colors.r', function (newValue,oldValue) {
                scope.message = 'r changed';
            });

            scope.$watch('colors.g', function (newValue,oldValue) {
                scope.message = 'g changed';
            });

            scope.$watch('colors.b', function (newValue,oldValue) {
                scope.message = 'b changed';
            });
        }
    }
}]);
哈里舍尔

要观看整个对象,您需要使用深度监视。确实需要第三个参数才能观看...

        scope.$watch('colors',function(newValue,oldValue){
           scope.gMessage++;
        }, true);

检查此更新的插件链接

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章