2013-11-26 68 views
0

假设您在全局范围内有一个对象(我知道它很糟糕,仅用于演示目的),并且您希望在Angular JS中观察该对象的属性。在Angular JS中观察全局对象的属性

var human = { 
    name: 'Somebody' 
}; 
var app = angular.module('app', []); 
app.controller('watchController', function ($scope) { 
    $scope.$watch('human.name', function() { 
     alert('foo is changed'); 
    }); 
    $scope.doWatch = function() { 
     human.name = new Date().toString(); 
    }; 
}); 

这个HTML:

<div ng-app='app'> 
    <div ng-controller='watchController'> 
     <input type='button' value='Invoke' ng-click='doWatch()' /> 
    </div> 
</div> 

你怎么做呢?此代码不起作用。看到这fiddle

+0

“我知道这是坏” - 所以不要这么做。将您的模型对象映射到查看模型,然后观看_those_。另外 - 要看看观察者的工作方式,请参阅http://teropa.info/blog/2013/11/03/make-your-own-angular-part-1-scopes-and-digest.html –

+0

@BenjaminGruenbaum - 我猜平原好奇心是足够好的原因;) – kamituel

+1

'$ scope.human = human' – charlietfl

回答

4

$watch接受函数作为第一个参数。在返回值的变化触发到监听:打电话

$scope.$watch(function(){ 
    return human.name; 
}, function() { 
    console.log('foo is changed'); 
}); 

Fiddle