在下面的设置上下文中,如何告诉父控制器(ZoneController
)子控制器中发生的事情(ZoneCodeController
)?
.state('zone',
{
url:'/zone',
controller:'ZoneController',
templateUrl:'views/zone.html'
})
.state('zone.code',
{
url:'/:zoneCode',
controller:'ZoneCodeController',
templateUrl:function(stateParams)
{
return 'views/zone-codes/'+stateParams.zoneCode+'.html';
}
}
答案 0 :(得分:3)
建议的方法是创建一个跨控制器共享数据的服务。我创造了类似的东西:
angular.module('MODULENAME', []).factory('SharedHashTable', function($rootScope, $log) {
var data = {};
return {
set: function(key, value) {
data.key = value;
},
get: function(key) {
return data.key;
}
};
});
然后你可以将SharedHashTable添加到任何控制器可以调用它的set或get方法:
// in controller 1
SharedHashTable.set("MyData", $scope.myData);
// in controller 2
$scope.otherData = SharedHashTable.get("MyData");
答案 1 :(得分:2)
如果您希望将父控制器订阅到子女中发生的事件,您可以使用$ emit。
.controller('ZoneController', function ($scope) {
$scope.$on('eventName', function (data) {
// Do something.
});
})
.controller('ZoneCodeController', function ($scope) {
$scope.somethingHappened = function () {
var data = {key: 'value'};
// Publish the event up the controller hierarchy.
$scope.$emit('eventName', data);
}
});
另外,如果您只想分享数据,服务可能是更好的选择。