同じコントローラーによって制御される2つのdivを作成すると、Angularのコントローラーがビューの更新を停止しているように見えます。
これを実証するために、必要最低限の例をまとめました。ここでサンプルを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';
}
送信ボタンは正常に機能しますが、[リセット]ボタンをクリックするとresetting
、コンソールにログインしているのが表示されますが、ビュー(フォーム入力)が更新されません。
なんでそうなの?私が取り組んでいる現在のプロジェクトでは、間にある特定のHTMLが別のコントローラーに属しているため、これを実行する必要があります。どうすればこれを回避できますか?