関数が実装された親 Ctrl がありlocationChangeStart
ます。また、htmlから親コントローラーにデータをバインドする子コントローラーもあります
html:
<div> <!-- parent ctrl setted in routing -->
<div ng-controller="ChildCtrl as childCtrl"
ng-init="childCtrl.setObjectName('somename')">
<textarea name="name" ng-model="parentObject.name"></textarea>
</div> <!-- end of child -->
</div> <!-- end of parent-->
親コントロール:
app.controller('ParentCtrl', function ($scope,$stateParams,config){
console.log("in parent");
$scope.timerPromise = null;
$scope.parentObject= {};
$scope.timerPromise = $interval(
function(){
},config.AUTOSAVE_TIMER_FREQUENCY);
console.log($scope.timerPromise);
$scope.$on('$locationChangeStart', function(event) {
if($scope.timerPromise) {
$interval.cancel($scope.timerPromise);
}
console.log("route changed in parent");
});
子コントロール
app.controller('ChildCtrl', function ($scope, $rootScope, $stateParams) {
console.log('in child');
var vm = this;
vm.objectId = $stateParams.id;
vm.setObjectName = function(objectName) {
console.log('setting object name in commets+'+objectName);
vm.objectName = objectName;
};
});
私の問題は次のとおりです-親ctrl変数との間のバインディングは問題ありません。ng-modelを介して子ctrlにサーバーからのデータが表示されますが、戻るボタンを押さなくても親ctrlをロードした後にlocationChangeStartが発生するため、親の自動保存が機能しません何も押さなかった。場所変更イベントでタイマーが停止します。何も押さなくても locationChangeStart が発生するのはなぜですか? ネストされたコントローラーが原因ですか?親コントローラーとエイリアス化された子コントローラーを一緒にルーティングする際に、エイリアス化されていない、ng-controller タグが付けられていない設定を使用できますか?
私のコンソール出力は次のとおりです。
in parent
Promise {$$state: Object, $$intervalId: 160} // timer promise
in child
setting object name in commets+somename
route changed in parent
ほら、ルートが変更されたので、私の質問はその奇妙な動作についてです