0

関数が実装された親 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

ほら、ルートが変更されたので、私の質問はその奇妙な動作についてです

4

1 に答える 1

0

https://stackoverflow.com/a/28600938/2104560 -locationChangeStart古い ngRoute から来ました。今は ui-router を使用しており、stateChangeStartイベントを使用する必要があります。

于 2015-11-15T13:06:36.520 に答える