如何在 ui.route - onEnter 方法中访问父作用域变量?
How to access parent scope variables inside ui.route - onEnter method?
我正在使用 angularjs 和 angular ui 路由。在父状态控制器中,我定义了范围变量 dataset
如何在子状态 onEnter
方法中访问父状态范围。
我试过了
.state('business.remove', {
url: '/remove',
onEnter: [...'$scope',...,
function (...$scope,...) {
...
$scope.$parent.dataset
但是报错
Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope
根据您对变量的使用,我认为您可以做各种事情。
如果你想改变它,你可以使用从下层到上层的消息传递,在下层范围中使用 $scope.$emit('eventName', {someData})
,在父范围中使用 $on('eventName', someFunction)
,并在你的函数中进行更改。
但是如果您尝试读取该变量,您可以在父级中使用 $rootScope
定义该变量并在其他地方使用它,或者在服务中定义它然后调用该服务并在任何时候操作您的数据需要...
除此之外,您还可以使用第一种方式(消息传递)更进一步,使用 $broadcast
从父作用域向子作用域发送另一条消息,并在其中发送该变量以供读取$on
在子范围内...老兄,我不知道这是否是一个非常优化的解决方案!
希望对您有所帮助
在 UI-Router 中,应使用 resolves 来加载应用程序的主要数据。 Resolves 可以向下传播到子状态,并且对管理生命周期很有用;它们在进入状态时加载,在退出状态时消失。您可以在父状态上创建一个解析并将其注入父视图或子视图(控制器),and/or onEnter/onExit 挂钩。
.state('business', {
url: '/remove',
resolve: {
dataset: function(someService) {
someService.fetchDataset();
}
},
controller: function(dataset, $scope) {
// do something with dataset
}
.state('business.remove', {
url: '/remove',
onEnter: function (dataset) {
// do something else with dataset
我正在使用 angularjs 和 angular ui 路由。在父状态控制器中,我定义了范围变量 dataset
如何在子状态 onEnter
方法中访问父状态范围。
我试过了
.state('business.remove', {
url: '/remove',
onEnter: [...'$scope',...,
function (...$scope,...) {
...
$scope.$parent.dataset
但是报错
Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope
根据您对变量的使用,我认为您可以做各种事情。
如果你想改变它,你可以使用从下层到上层的消息传递,在下层范围中使用 $scope.$emit('eventName', {someData})
,在父范围中使用 $on('eventName', someFunction)
,并在你的函数中进行更改。
但是如果您尝试读取该变量,您可以在父级中使用 $rootScope
定义该变量并在其他地方使用它,或者在服务中定义它然后调用该服务并在任何时候操作您的数据需要...
除此之外,您还可以使用第一种方式(消息传递)更进一步,使用 $broadcast
从父作用域向子作用域发送另一条消息,并在其中发送该变量以供读取$on
在子范围内...老兄,我不知道这是否是一个非常优化的解决方案!
希望对您有所帮助
在 UI-Router 中,应使用 resolves 来加载应用程序的主要数据。 Resolves 可以向下传播到子状态,并且对管理生命周期很有用;它们在进入状态时加载,在退出状态时消失。您可以在父状态上创建一个解析并将其注入父视图或子视图(控制器),and/or onEnter/onExit 挂钩。
.state('business', {
url: '/remove',
resolve: {
dataset: function(someService) {
someService.fetchDataset();
}
},
controller: function(dataset, $scope) {
// do something with dataset
}
.state('business.remove', {
url: '/remove',
onEnter: function (dataset) {
// do something else with dataset