Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 将模型更改以角度方式传播到父控制器_Angularjs - Fatal编程技术网

Angularjs 将模型更改以角度方式传播到父控制器

Angularjs 将模型更改以角度方式传播到父控制器,angularjs,Angularjs,我有一个angularJS应用程序,会尝试模拟Asana.com功能 情况如下: 我在body标签中为我的应用程序提供了一个主控制器,在这个控制器中,我在侧边栏中填充了我的名字: .controller('MainController', ['$scope', 'NamesService', function($scope, NamesService) { $scope.names = NamesService.query(); ... }; 当我单击任何名称(例如Anna)

我有一个angularJS应用程序,会尝试模拟Asana.com功能

情况如下:

我在body标签中为我的应用程序提供了一个主控制器,在这个控制器中,我在侧边栏中填充了我的名字:

.controller('MainController', ['$scope', 'NamesService', function($scope, NamesService) {
    $scope.names = NamesService.query();
    ...
};
当我单击任何名称(例如Anna)时,我的应用程序会更改路径,并在我的ng视图中插入name-edit.html模板,如上图中的内容区域所示。我有一个用于从Anna更改为Carol的输入和一个更新按钮。当我点击更新按钮时,它会启动一个函数,在我的数据库中进行更新,在我的内容区域(由黄色箭头位置表示)将Anna更改为Carol,但不会更改侧边栏中的红色箭头位置

我试图在我的成功更新回调中再次调用以下代码,但没有成功

$scope.names = NamesService.query();

我想知道如何将子控制器传播到父控制器,在$scope.names内将Anna更改为Carol。是否可以在不重新加载$scope.names的情况下执行此操作?

您可以使用
$scope.$emit('eventName',eventData)
运行子控制器在层次结构上向上传递数据

//child, assuming you have promise callback
NamesService.query().then(function(data){
   $scope.$emit('eventName', data)
})
在您的父控制器中,具有以下内容

//parent
$scope.$on('eventName', function(event, data){
   $scope.names = data;
})

您可以使用
$scope.$emit('eventName',eventData)
取消您的子控制器以在层次结构上向上传递数据

//child, assuming you have promise callback
NamesService.query().then(function(data){
   $scope.$emit('eventName', data)
})
在您的父控制器中,具有以下内容

//parent
$scope.$on('eventName', function(event, data){
   $scope.names = data;
})

您可以使用
$scope.$emit('eventName',eventData)
取消您的子控制器以在层次结构上向上传递数据

//child, assuming you have promise callback
NamesService.query().then(function(data){
   $scope.$emit('eventName', data)
})
在您的父控制器中,具有以下内容

//parent
$scope.$on('eventName', function(event, data){
   $scope.names = data;
})

您可以使用
$scope.$emit('eventName',eventData)
取消您的子控制器以在层次结构上向上传递数据

//child, assuming you have promise callback
NamesService.query().then(function(data){
   $scope.$emit('eventName', data)
})
在您的父控制器中,具有以下内容

//parent
$scope.$on('eventName', function(event, data){
   $scope.names = data;
})


这个链接()与我试图实现的功能类似,但是联系人列表并不像我的那样来自服务。在此场景中,他们正在更改列表中的模型。我想更改子控制器中的模型,然后在主控制器中重新加载联系人列表此链接()执行与我尝试实现的类似的操作,但联系人列表并非来自像我这样的服务。在此场景中,他们正在更改列表中的模型。我想更改子控制器中的模型,然后在主控制器中重新加载联系人列表此链接()执行与我尝试实现的类似的操作,但联系人列表并非来自像我这样的服务。在此场景中,他们正在更改列表中的模型。我想更改子控制器中的模型,然后在主控制器中重新加载联系人列表此链接()执行与我尝试实现的类似的操作,但联系人列表并非来自像我这样的服务。在此场景中,他们正在更改列表中的模型。我想更改子控制器中的模型,然后在主控制器解决方案中重新加载联系人列表!我现在尝试了$scope.$parent.names=NamesService.query();在我的成功更新回调中,它工作了,但我不明白。如果在我的子控制器中有父控制器$scope access,则只有$scope.names=NamesService.query();应该可以,对吧?$scope.$parent.names也应该可以;但我刚刚提出的事件系统更具可控性和灵活性flexible@shershen:你知道2.0发布后该怎么做吗?$scope不是被删除了吗?@G.Deward在这种情况下,您可以使用共享服务,比如应用程序之间的通用事件总线modules@shershen:这就是我一直想做的。几个月前,我从控制器中删除了
$scope
。但是,一旦在父级中设置了值(例如
vm.item=svc.item
),我就无法从另一个控制器更改
vm.item
。如果我执行
svc.item=newItem
操作,则更改不会反映在顶级控制器的
vm.item
实例中:(很好的解决方案!我现在在成功更新回调中尝试了$scope.$parent.names=NamesService.query();它可以工作,但我不明白。如果在子控制器中有父控制器$scope访问权限,则只有$scope.names=NamesService.query();应该可以工作,对吗?$scope.$parent.names也应该可以;但我只是建议事件系统更具可控性和可扩展性flexible@shershen:你知道2.0发布后将如何实现吗?$scope不是被删除了吗?@G.Deward在这种情况下,你可以使用共享服务,比如应用程序之间的通用事件总线modules@shershen:这就是我所知道的甚至尝试这样做。几个月前,我从控制器中删除了
$scope
。但是,一旦在父级中设置了值(例如
vm.item=svc.item
)我无法从另一个控制器更改
vm.item
。如果我更改了
svc.item=newItem
,则更改不会反映在顶级控制器的
vm.item
实例中:(很好的解决方案!我现在尝试了$scope.$parent.names=NamesService.query();在我的成功更新回调中,它可以工作,但我不明白。如果我的子控制器中有父控制器$scope access,则只有$scope.names=NamesService.query();应该可以工作,对吗?$scope.$parent.names也应该可以;但我只是建议事件系统更具可控性和可扩展性flexible@shershen:你知道2.0发布后将如何实现吗?$scope不是被删除了吗?@G.Deward在这种情况下,你可以使用共享服务,比如应用程序之间的通用事件总线modules@shershen:这就是我所知道的甚至尝试这样做。几个月前我从我的控制器中删除了
$scope
。但是,一旦在我的父级中设置了一个值(例如
vm.item=svc.item
),我就无法从另一个控制器中更改
vm.item
。如果我这样做
svc.item=n