我有 AngluarJS
视图,其中列出了一些项目,用户可以点击每个项目delete/update
。当用户点击一个订单项时,我们会显示child view
。当用户对订单项执行某些删除/更新操作时,我正在使用state.go
函数重新加载父视图。
但是我的父视图控制器没有被调用(父控制器中的语句没有被调用)。
我使用$urlRouterProvider
来管理每个州。
我将使用以下语句返回父州:
$state.go('parent',{}, {reload: true});
以上操作是触发我的配置代码段,并从服务器加载新数据,以下是配置中加载父状态的代码段:
$stateProvider.state('parent', {
url : '/parent',
templateUrl : 'app/parent.html',
controller : 'ParentController',
controllerAs : 'parentController',
resolve : {
list : function($stateParams, parentServices){
return parentServices.getList();
}
}
});
parentServices.getList()
此函数正在被调用。我已经为父控制器中的第一个语句设置了断点,但它没有被调用。
重新加载页面时加载正常。请让我知道当前流程有什么问题,这会阻止呼叫控制器。
$stateProvider.state('parent', {
url : '/parent',
templateUrl : 'app/parent-management/parent.html',
controller : 'ParentController',
controllerAs : 'parentController',
resolve : {
parentList : function($stateParams, keyServices){
return parentServices.getList();
}
}
});
$stateProvider.state('parent.child', {
url : '/:action/:id',
templateUrl : 'app/parent-management/parent-child.html',
controller : 'ParentChildController',
controllerAs : 'parentChildController',
resolve : {
currentModelID : function($stateParams){
return {
id : $stateParams.id,
action : $stateParams.action
}
}
}
});
如果我导航到子控制器的子状态 初始化,如果我然后导航回父状态,父母 控制器不会被重新创建。
感谢。
答案 0 :(得分:0)
将您的项目列表放在Angular服务中,然后您可以使用此服务访问父控制器和子控制器中的数据。让服务负责更新(确保您更新并且不要替换)列表和来自服务器的信息。
然后,您可以在两个控制器中使用此信息,并且每个控制器对数据进行的任何操作都可供两个控制器使用,而无需重新初始化控制器(当控制器不会发生这种情况时)使用嵌套状态。)
答案 1 :(得分:0)
嗯,结构是Angular应用程序中最重要的部分,路由器在这方面起着至关重要的作用。
[[[[1,2,3,4,....N]]]]
答案 2 :(得分:0)
我能够通过在代码中进行以下更改来解决我的问题:
我的child view
位于modal popup
内,因此要从parent view
返回child view
(重新加载数据),代码段编写如下:< / p>
$state.go(states.parent,{}, {reload: true});
closeChilUIPopover();// functionality to close the modal popup of child
当我注释掉 closeChilUIPopover()
函数时,父视图在新加载的数据中正常呈现。
然后我改变了呼叫顺序如下:
closeChilUIPopover();
$state.go(states.parent,{}, {reload: true});
但改变通话顺序后也有同样的问题。所以我在 closeChildUIPopover
的 callback
函数中添加了 $state.go
,如下所示:
$state.go(states.parent,{}, {reload: true}).then(function(){
closeChilUIPopover();
});
现在一切正常。 感谢您的帮助。