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中执行?