我已经在网上搜索了解决这个问题的方法,但无法找到最佳解决方案。不同的方法涉及在状态,自定义data
或父services
上使用$scopes
,但似乎没有任何内容适用于此处。
我有一个带有一些对象或变量的父控制器,从这个状态我可以进入子状态,我想在父状态中更新变量并返回到父状态。代码将更好地解释它。
function parentController($state) {
var vm = this;
vm.myVal = 1;
}
function childController($state) {
var vm = this;
vm.changeValue = function () {
//TODO: change value of myVal in parent so it updates on view
//if possible allow also updating or passing whole objects to parent
return $state.go('parent');
//is it possible to pass anything to reloaded state?
//return $state.go('parent', {}, {reload:true})
}
}
可以使用完整的工作代码here on Plunker。
我对AngularJS很陌生,所以我可能会遇到根本性的错误,而且代码需要重新编写来实现这一点。我宁愿保留controller as
语法。
最好的方法是什么?如果可以,请将Plunker用工作溶液分叉。
答案 0 :(得分:0)
这是父母/孩子之间沟通的一个例子。控制器使用Angular的$ scope的分层行为。 ($ scope在角度方面很特别!)
function parentController($scope) {
var self = this;
this.myVal = 1;
this.myMessage = "Starting message";
// set up method that child controllers can call.
$scope.signalParent = function(data) {
console.log("Parent signalled with " + JSON.stringify(data));
self.myVal++;
self.myMessage = data.msg;
if (!$scope.$$phase) {
$scope.$apply();
}
};
}
function childController($scope) {
var self = this;
this.changeValue = function() {
// call the method from the parent.
$scope.signalParent({msg: "Hello " + Math.random(100)});
};
}
})();
Plunkr:plnkr.co/edit/1yhFAcGq7nUS37VtpAlr?p=preview
父控制器设置$ scope" signalParent"财产是一种功能。任何较低级别的控制器都将继承' $ scope因此可以调用signalParent()方法。
我必须说,直接在控制器之间进行通信被认为是不正确的。据我所知。 "事件处理" &安培; "信号"是首选。