• 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);
        }
    }

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

  • 相关阅读:
    【2019/3/23】周进度报告
    第十周总结
    程序员修炼之道-从小工到专家阅读笔记01
    第九周总结
    用户模板和用户场景
    一维数组最大子数组续
    程序员的自我修养阅读笔记03
    第八周总结
    NABCD项目分析
    第七周总结
  • 原文地址:https://www.cnblogs.com/vinozly/p/5299359.html
Copyright © 2020-2023  润新知