angularjs控制器实例化,ui-路由器
angularjs controller instantiation, 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()
}
}
}
})
当您从该状态的层次结构树之外的状态转到该状态或其后代之一时,特定状态的视图控制器将运行。
换句话说,如果您具有以下层次结构:
A B
/ /
AA C
/ \
C1 C2
然后,从 A 切换到 B 会实例化 B。然后切换到 C(或 C1 或 C2,就此而言),然后再切换回 B,不会重新实例化 B 的控制器。
如果切换到A(或AA),那么A就会实例化。然后切换回 B 将重新实例化 B.
因此,在您的情况下,C 很可能是 B 的子状态。并且 A 和 B 位于不同的祖先树中。
控制器什么时候实例化?您是第一次访问该州吗?另外,当你重新访问状态时会发生什么,新的控制器是否再次被实例化?
假设我有两个状态,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()
}
}
}
})
当您从该状态的层次结构树之外的状态转到该状态或其后代之一时,特定状态的视图控制器将运行。
换句话说,如果您具有以下层次结构:
A B
/ /
AA C
/ \
C1 C2
然后,从 A 切换到 B 会实例化 B。然后切换到 C(或 C1 或 C2,就此而言),然后再切换回 B,不会重新实例化 B 的控制器。
如果切换到A(或AA),那么A就会实例化。然后切换回 B 将重新实例化 B.
因此,在您的情况下,C 很可能是 B 的子状态。并且 A 和 B 位于不同的祖先树中。