在Angularjs中访问组件/控制器之间的对象

时间:2016-09-12 23:15:28

标签: javascript angularjs

我需要在Angularjs中的控制器之间共享一些对象,我已经做了一些有用的东西,但它对我来说感觉有点笨拙。我想知道我所拥有的是否可以接受,或者是否有一种首选方式。

在componentA中,我有一个我想从componentB访问的对象。

app.component("componentA", {
    controller: function ($scope, $rootScope, $compile) {

        //the object whose contents I want
        $scope.objectToAccess = {name: 'object', value: 3};

        //receives broadcast from componentB, returns the object
        $rootScope.$on("getObject", function () {
            $rootScope.$broadcast('receiveObject', $scope.objectToAccess);
        });
    }
}

app.component("componentB", {
    controller: function ($scope, $rootScope, $compile) {

        $scope.object = {name : null, value: null};

        //receives the broadcast of the object and sets the value
        $rootScope.$on("receiveObject", function (event,object) {
            console.log(object);
            $scope.object = object;
        });

        //broadcast to get the object contents
        $rootScope.$broadcast('getObject');   
    }
}

这很有效,但只是感觉太复杂,需要进行大量的来回沟通。 Angular中是否有任何专门用于处理此类事物的内容,或者我认为可以接受的内容?

1 个答案:

答案 0 :(得分:1)

在我看来,在订阅数据更改而不是请求数据更改的情况下,应使用$ scope事件。

相反,您可以使用一种服务来保存数据并在控制器中引用它。由于服务是单例,因此控制器将共享相同的实例,因此可以轻松共享数据。