嵌套的ng-controller会触发$ locationChangeStart吗?

时间:2015-11-15 12:26:09

标签: angularjs angular-ui-router angular-controller

我有一些具有locationChangeStart功能实现的父Ctrl。我还有Child控制器,它将数据从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-->

父ctrl:

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");
});

子Ctrl

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看到来自子控制器的服务器中的数据但是父进程中的自动保存不起作用,因为 locationChangeStart在加载父ctrl之后触发即使我没有按下按钮,甚至没有按任何东西。位置更改事件会停止计时器为什么即使我没有按任何东西也会触发locationChangeStart?是否因为嵌套控制器?我可以在路由父控制器和别名子控制器中一起使用非别名的,而不是ng-controller标记的吗?

我的控制台输出如下:

in parent
Promise {$$state: Object, $$intervalId: 160} // timer promise
in child
setting object name in commets+somename
route changed in parent

你看,路线改变了,我的问题是关于那种奇怪的行为

1 个答案:

答案 0 :(得分:0)

https://stackoverflow.com/a/28600938/2104560 - foo()来自旧的ngRoute现在我使用ui-router并且必须使用if ( condition1 ) { if ( foo() ) { // do something } } 事件。