Javascript AngularJS父控制器从子控制器返回时未调用

Javascript AngularJS父控制器从子控制器返回时未调用,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我有AngluarJS视图,其中列出了一些项目,用户可以通过单击每个项目来删除/更新它。当用户单击一个行项目时,我们将显示一个子视图。当用户对行项目执行一些删除/更新操作时,我正在使用state.go函数重新加载父视图 但我的父视图控制器未被调用(父控制器中的语句未被调用) 我使用了$urlRouterProvider来管理每个状态。 我将使用以下语句返回到父状态: $state.go('parent',{}, {reload: true}); 上面的操作正在触发我的配置代码段,并从服务器加载

我有
AngluarJS
视图,其中列出了一些项目,用户可以通过单击每个项目来
删除/更新它。当用户单击一个行项目时,我们将显示一个
子视图
。当用户对行项目执行一些删除/更新操作时,我正在使用
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()
正在调用此函数。我已经在父控制器中为第一条语句设置了断点,但它没有被调用

重新加载页面时,其加载效果良好。请让我知道当前流有什么问题,它阻止调用控制器

更新:状态配置 如果导航到子状态,子控制器将 初始化,然后导航回父状态,父状态 控制器将不会被重新创建


谢谢。

将项目列表放在Angular service中,然后您可以使用此服务访问父控制器和子控制器中的数据。让服务负责使用来自服务器的信息更新(确保您更新而不是替换)列表


然后,您可以在两个控制器中使用此信息,并且每个控制器对数据所做的任何操作都将对两个控制器可用,而无需重新初始化控制器(这在使用嵌套状态时不会发生在父控制器上)。

,结构是Angular应用程序中最重要的部分,路由器在其中起着至关重要的作用

        $stateProvider
            .state("versions-layout", {
                abstract: true,
                url: "/versions/:id",
                templateUrl: "js/versions/versions-layout.html",
                controller: "VersionsController",
                controllerAs: "versionsVm",
                resolve: {
                    version: ["$stateParams", "VersionsService", function ($stateParams, VersionsService) {
                        return VersionsService.getVersionById($stateParams.id);
                    }]
                },
            })
            .state('versions', {
                parent: "versions-layout",
                url: "",
                views: {
                    "version-characteristics": {
                        templateUrl: 'js/versions/version-characteristics/version-characteristics.html',
                        controller: 'VersionCharacteristicsController',
                        controllerAs: 'vm'
                    },
                    "programs": {
                        templateUrl: 'js/versions/programs/programs.html',
                        controller: 'ProgramsController',
                        controllerAs: 'vm',
                        resolve: {
                            programsData: ["version", function (version) {
                                return version.data.programs;
                            }]
                        }
                    }
})

我可以通过对代码进行以下更改来解决问题:

我的
子视图
模式弹出窗口中
,因此要从
子视图
返回到
父视图
(重新加载数据),代码段编写如下:

$state.go(states.parent,{}, {reload: true});
closeChilUIPopover();// functionality to close the modal popup of child
closeChilUIPopover();
$state.go(states.parent,{}, {reload: true});
$state.go(states.parent,{}, {reload: true}).then(function(){
    closeChilUIPopover();
});
当我注释掉
closechiluipover()
函数时,新加载的数据可以很好地呈现父视图

于是我改变了通话顺序如下:

$state.go(states.parent,{}, {reload: true});
closeChilUIPopover();// functionality to close the modal popup of child
closeChilUIPopover();
$state.go(states.parent,{}, {reload: true});
$state.go(states.parent,{}, {reload: true}).then(function(){
    closeChilUIPopover();
});
但在改变通话顺序后也出现了同样的问题。因此,我在
中添加了
函数,如下所示:

$state.go(states.parent,{}, {reload: true});
closeChilUIPopover();// functionality to close the modal popup of child
closeChilUIPopover();
$state.go(states.parent,{}, {reload: true});
$state.go(states.parent,{}, {reload: true}).then(function(){
    closeChilUIPopover();
});
现在一切正常。
谢谢您的帮助。

是的,我可以提供更多信息。所有项目都存储在数据库中。从我的服务中,我正在进行RESTAPI调用以执行CURD操作。子视图将使用服务更新数据库中的数据。所以在一些更新发生后,我想在父视图中重新呈现更新的数据信息。因此,我从子视图调用state.go('parent')。在某些情况下,用户可能会从子视图中删除项,因此我需要使用新的项列表(页面大小相同)重新加载父视图。如果使用
$state.go()
,导航到新状态,则在控制器初始化时加载列表项时,无需显式执行任何操作。控制器在后台不处于活动状态,它是在您更改为其使用状态时创建的。我能想象的唯一一次需要更新父控制器的情况是,父控制器是否在嵌套视图中有子控制器。即使这样,使用服务,两个视图都可以查看相同的列表并对其进行操作。我将使用
state.go()
返回父视图。正如您所提到的,我正在为parent和view使用一个公共服务来获取更新的数据。现在有一个疑问,当我们进入之前所处的状态时,控制器是否会开始正确执行?在我的例子中,当我回到父视图时,控制器中的ant语句并没有执行。我观察到的是,如果您处于一种状态,并尝试使用
$state.go()
导航到相同的状态,则不会发生任何事情。如果导航到子状态,则将初始化子控制器;如果随后导航回父状态,则不会重新创建父控制器。这很可能是你的问题的原因。