如果我創建兩個div,兩者都由同一個控制器控制,Angular的控制器似乎停止更新我的視圖。爲一個控制器分割HTML組件導致控制器停止工作
我已經把一個裸骨的例子放在一起來演示這一點。查看示例here on JSFiddle最簡單,但我也在下面發佈代碼。
HTML
<div ng-app='App'>
<div ng-controller="MyCtrl">
<form>
<input type="text" ng-model="search.query"></input>
<button ng-click="search.submit()">Submit</button>
</form>
</div>
<div ng-controller="SomeOtherCtrl">
{{sampleText}}
</div>
<div ng-controller="MyCtrl">
<button ng-click="search.reset()">Reset Form</button>
</div>
</div>
JS
var app = angular.module('App',[]);
function MyCtrl($scope)
{
$scope.search = {
query : 'foobar',
submit : function() {
this.query = 'Submitted';
console.log(this.query);
},
reset : function() {
console.log('resetting');
this.query = '';
}
};
}
function SomeOtherCtrl($scope) {
$scope.sampleText = 'other controller text';
}
提交按鈕工作正常,但是當我點擊Reset按鈕,我看到resetting
在控制檯中記錄,但我視圖(表單輸入)不會更新。
這是爲什麼?在我正在開發的一個當前項目中,我不得不這樣做,因爲屬於另一個控制器的某些HTML屬於它們。我該如何解決這個問題?
在'MyCtrl'結尾添加'console.log($ scope)',將會看到你正在用不同的作用域ID創建2個獨立的對象實例。可能需要一個服務來處理範圍?中間控制器不能嵌套在'mYCtrl'中? – charlietfl 2013-03-25 05:03:25
我可以使用服務解決此問題。我希望我不必但似乎這是我唯一的選擇。不幸的是,中間控制器不能嵌套在MyCtrl中,因爲MyCtrl的第一個實例本身嵌套在另一個控制器中。 – xbonez 2013-03-25 06:46:35