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

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

  • 相关阅读:
    Android Eclipse真机调试 过滤器filter没有显示
    Maven in 5 Minutes(Windows)
    接触JETM
    使用mobile.changePage()时出现的问题(转)
    jQuery Mobile页面跳转后未加载外部JS(转)
    iDempiere VS ADempiere
    为Drupal7.22添加富编辑器 on Ubuntu 12.04
    说说iDempiere = OSGi + ADempiere的OSGi
    购买阿里云云服务器( 最小配置)
    安装Drupal7.12升级至7.22
  • 原文地址:https://www.cnblogs.com/vinozly/p/5299359.html
Copyright © 2020-2023  润新知