从孩子回来时,AngularJS父控制器没有调用

时间:2017-03-16 10:24:54

标签: javascript jquery angularjs

我有 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
                    }
                }
            }
        });
  

如果我导航到子控制器的子状态   初始化,如果我然后导航回父状态,父母   控制器不会被重新创建。

感谢。

3 个答案:

答案 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();
});

现在一切正常。 感谢您的帮助。