• angularjs控制器之间通信,事件通知服务


    service要记住一点就是所有的services都是singleton(单例)的,service更多的是做一些业务逻辑,数据交互。当然,利用单例这特点也可以用来做不同控制器间的通信。控制器间的通信也有多种做法:AngularJS控制器controller如何通信?。

    利用作用域继承的方式。即子控制器继承父控制器中的内容

    基于事件的方式。即$on,$emit,$boardcast这三种方式

    服务方式。写一个服务的单例然后通过注入来使用

    第一种还是有些局限性,第二种用起来并不太方便(或者个人不习惯),于是利用service实现了基于事件的通知方式。

    上代码

    //提供给不同控制器的通信
    app.factory("EventService", function () {
        var onEventFunc = {};
        return {
            on: function (type, f) {
                //事件绑定
                onEventFunc[type] = f;
            }, trigger: function (type, data) {
                //触发事件
                for (var item in onEventFunc) {
                    if (item == type)
                        onEventFunc[item](data);
                }
            }
        }
    });
     
    //使用
    function test1Controller(EventService) {
        EventService.on("newMess", function (data) {
            //console.log(data);
        });
    }
    function test2Controller($scope,EventService) {
        $scope.send = function (data) {
            //这里是我在项目中使用的一个例子,当发送了新消息,通知另一个控制器
     
            //触发事件,通知
            EventService.trigger("newMess", data);
        }
    }

    可以基于这思路去扩展实现更复杂的业务。

  • 相关阅读:
    Beta 冲刺(1/7)
    福大软工 · BETA 版冲刺前准备(团队)
    福大软工 · 第十一次作业
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
    个人作业——软件工程实践总结作业
    Beta 答辩总结
    Beta 冲刺 (7/7)
    Beta 冲刺 (6/7)
  • 原文地址:https://www.cnblogs.com/vinozly/p/5299359.html
Copyright © 2020-2023  润新知