我使用带角度ui路线的angularjs。在父状态控制器中,我定义了范围变量dataset
如何在子状态onEnter
方法中访问父状态范围。
我试过这个
.state('business.remove', {
url: '/remove',
onEnter: [...'$scope',...,
function (...$scope,...) {
...
$scope.$parent.dataset
但它给出了错误
错误:[$ injector:unpr]未知提供者:$ scopeProvider< - $ scope
答案 0 :(得分:1)
取决于你对变量的使用,我认为你可以做各种各样的事情。
如果你想改变它,你可以使用$ scope。$ emit(' eventName',{someData})在较低范围内使用从Lower到Upper范围的消息传递,以及$ on(&#39 ; eventName',someFunction)在父范围内,并在你的函数中进行更改。
但是如果您正在尝试读取变量,您可以在父级中使用$ rootScope定义该变量并在其他地方使用它,或者在服务中定义它然后调用服务并在需要时操作数据。
除了这些之外,您可以使用第一种方式(消息传递)更进一步,并使用$ broadcast将另一条消息从父范围发送给子节点,并将其中的变量发送到内部使用$ on读取儿童范围......我不知道它是否是一个非常优化的解决方案!
希望有用
答案 1 :(得分:0)
在UI-Router中,应使用解析来加载应用程序主数据。 Resolve可以传播到子状态,对管理生命周期很有用;它们在进入状态时加载,在状态退出时消失。您可以在父状态上创建解析并将其注入父视图(子控制器)和/或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