Angularjs 如何告诉父状态控制器在子状态控制器中发生了什么
在下面的设置上下文中,如何告诉父控制器(Angularjs 如何告诉父状态控制器在子状态控制器中发生了什么,angularjs,angular-ui,Angularjs,Angular Ui,在下面的设置上下文中,如何告诉父控制器(zoneconroller)子控制器(zoneconroller)中发生了什么事情 如果希望向父控制器订阅在子控制器中发生的事件,可以使用$emit .controller('ZoneController', function ($scope) { $scope.$on('eventName', function (data) { // Do something. }); }) .controller('ZoneCodeC
zoneconroller
)子控制器(zoneconroller
)中发生了什么事情
如果希望向父控制器订阅在子控制器中发生的事件,可以使用$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);
}
});
或者,如果您只是希望共享数据,则服务可能是更好的选择。如果您希望向父控制器订阅在子控制器中发生的事件,则可以使用$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);
}
});
或者,如果您只是希望共享数据,那么服务可能是更好的选择。推荐的方法是创建一个跨控制器共享数据的服务。我创造了类似于:
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");
建议的方法是创建跨控制器共享数据的服务。我创造了类似于:
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");
定义发生的事情。可以通过服务共享数据,或者使用自定义事件,这些事件也可以在整个应用程序中传递数据。我需要的只是刷新表,而不是其他。因此,我希望父控制器知道位置哈希已更改,并让它获取该位置哈希的数据。define
发生了什么事
。可以通过服务共享数据,或者使用自定义事件,这些事件也可以在整个应用程序中传递数据。我需要的只是刷新表,而不是其他。因此,我希望父控制器知道位置散列已更改,并让它获取该位置散列的数据;在控制器2中,总是在SharedHashTable.set(“MyData”、$scope.MyData)时运行;在控制器1中执行?但SharedHashTable.get(“MyData”);在控制器2中,总是在SharedHashTable.set(“MyData”、$scope.MyData)时运行;是否在控制器1中执行?