angularjs控制器实例化,ui-router

eNd*_*ddy 1 angularjs angularjs-scope angular-ui-router

什么时候控制器实例化?这是你第一次访问这个州吗?另外,当您重新访问状态时会发生什么,新控制器是否会再次实例化?

假设我有两个状态,A和B,并且我在状态B的顶部放置一个警告声明.我注意到如果从状态A转到B状态B的警告语句出现,它告诉我控制器已经实例化.但是假设我从状态A到B再到C并返回到B,警报声明不会消失.但是,如果我从状态A转到B转到C转到B转到A到B,警报声明会再次出现.

这是我路线的一部分:

州A = app.login

州B = app.pincodeCreate

州C = app.messagelist

.run ($ionicPlatform, startup) ->
  $ionicPlatform.ready(startup.ionicReady)

.config (googleAnalyticsCordovaProvider, $stateProvider, $urlRouterProvider) ->

  $stateProvider

    .state('app', {
      url: '/app',
      abstract: true,
      templateUrl: 'templates/menu.html',
      controller: 'AppController'
    })

    .state('app.pincodeCreate', {
      url: '/pincode',
      views: {
        menuContent: {
          templateUrl: 'templates/pincode.html',
          controller: 'PincodeController'
        }
      }
    })

    .state('app.login', {
      url: '/login',
      views: {
        menuContent: {
          templateUrl: 'templates/login.html',
          controller: 'LoginController'
        }
     }
   })
   .state('app.messagelist', {
      url: '/messagelist',
        views: {
          menuContent: {
            templateUrl: 'templates/messagelist.html',
            controller: 'MessageListController',
            resolve: {
              activities: (utils, store, $state) ->
                utils.getActivities().then ((activities) ->
                  store.isUserLoggedIn(true)
                 activities
              ), (error) ->
              $state.reload()
           }
        }
      }
    })
Run Code Online (Sandbox Code Playgroud)

New*_*Dev 5

当您从该状态的层次结构树之外的状态转到该状态或其后代之一时,将运行特定状态的视图控制器.

换句话说,如果您拥有以下层次结构:

     A     B
    /     /
   AA    C
        / \
       C1 C2
Run Code Online (Sandbox Code Playgroud)

然后,从A切换到B将实例化B.然后切换到C(或C1或C2,就此而言),然后返回到B,不会重新实例化B的控制器.

如果切换到A(或AA),则A将实例化.然后切换回B将重新实例化B.

所以,很可能在你的情况下,C是B的子状态.A和B在不同的祖先树中.