AngularJS 中的通信(发布订阅模式)(3)

从 requestNotificationChannel 接收事件通知也很简单,额外的我们只需要回调处理器来在消息被发送时使用通知来做一些自己的处理. 我们将再次需要添加一些依赖到面向我们的控制器、服务以及指令的 requestNotificationChannel 上, 你可以在下面代码的第二行中看到这些. 接下来我们需要定义一个事件回调处理器来对事件通知做出回应,你可以在下面的第五行代码中看到. 然后我们需要通过调用 onDataUpdated 方法来吧我们的回调处理器注册到requestNotificationChannel,并传入来自控制器和回调处理器的范围, 我们在第9行代码中做了这些事情.

    //define the controller for view1

    .controller('view1-controller', ['$scope', 'dataService', 'requestNotificationChannel', function($scope, dataService, requestNotificationChannel) {

        $scope.hops = dataService.getHops();

 

        var onDataUpdatedHandler = function() {

            $scope.hops = dataService.getHops();

        }

 

        requestNotificationChannel.onDataUpdated($scope, onDataUpdatedHandler);

 

        $scope.onEdit = function(hop) {

            requestNotificationChannel.editData(hop);

        }

 

        $scope.onDelete = function(hop) {

            dataService.deleteHop(hop);

        }

    }]);

用于控制器通信的控制器

我们也可以将 the requestNotificationChannel 用于控制器间的通信. 我们只需要有一个控制器扮演发布者的角色,而另外一个控制器扮演订阅者的角色就行了. 如果你观察到前段代码第11行view1-controller的onEdit方法,你会看到它发送了一个editData消息,消息包含需要使用 requestNotificationChannel 编辑的项.  下面的 view2-controller 从第5行到第9行将它的 onEditDataHandler 用 requestNotificationChannel 进行了注册. 如此无论何时view1-controller一旦发送editData消息,带上要修改的项,view2-controller都会受到editData消息的通知,获得该项并将其更新到它的模型.

    //define the controller for view1

    .controller('view2-controller', ['$scope', 'dataService', 'requestNotificationChannel', function($scope, dataService, requestNotificationChannel) {

        $scope.hop = null;

 

        var onEditDataHandler = function(item) {

            $scope.hop = item;

        };

 

        requestNotificationChannel.onEditData($scope, onEditDataHandler);

 

        $scope.onSave = function() {

            dataService.saveHop($scope.hop);

            $scope.hop = null;

        }

 

        $scope.onCancel = function() {

            $scope.hop = null;

        }

    }]);

写一个好的接口文档

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/72f2274bd49e9bbdad0621856e1e7be2.html