1
即使在工廠激活Deep手錶後,它也不會觸發。如何解決這個問題,以便在「名稱」值更改時觸發事件?
JavaScript代碼:
var app = angular.module('app', []);
app.controller('FirstCtrl', function($scope,testFactory) {
$scope.obj = testFactory.obj;
});
app.controller('SecondCtrl',function($scope,testFactory){
$scope.obj = testFactory.obj;
$scope.valueChange = testFactory.valueChange;
});
app.factory('testFactory', ['$rootScope',function ($rootScope) {
var factory = {};
factory.obj = { 'name':'John Doe'};
$rootScope.$watch(factory.obj,function(){
alert('Value Changed');
},true);
factory.valueChange = function(){
if(factory.obj.name == 'John Doe'){
factory.obj.name = "Jane Doe";
}
else
{
factory.obj.name = "John Doe";
}
};
return factory;
}]);
HTML代碼:
<body >
<div ng-controller="FirstCtrl">
<h4>Value bound with FirstCtrl and factory</h4>
<input type="text" ng-model="obj.name"/>
</div>
<div ng-controller="SecondCtrl">
<br>
<br>
<h4>Value from SecondCtrl. This shows that the bind between factory and controller is working</h4>
<p>{{obj.name}}</p>
<h4>Value updated directly in the factory</h4>
<button ng-click="valueChange()">Change Value</button>
</div>
</body>
Plunker:http://plnkr.co/edit/LhHOa2NehWGVEfpHfKJQ?p=preview
您能否詳細說明爲什麼手錶在控制器中比在工廠中更好?目前這個值可以通過不同的控制器來改變,所以在工廠裏使用一個手錶是有道理的,對嗎? –
您可以在工廠檢查'valueChange'函數中的值更改,您爲什麼需要在那裏觀看? – karaxuna
哦,不,不。那只是一個例子。要監視的「值」在控制器中直接更改,而不是通過工廠中的功能。我需要觸發一個函數,以防止任何控制器更改'值',因此我需要在工廠中使用$ watch。這會更好,我認爲,而不是在不同的控制器中有多個手錶功能。 –