zoukankan      html  css  js  c++  java
  • angular controller 之间的通信方式

    AngularJS中的controller是个函数,用来向视图的作用域($scope)添加额外的功能,我们用它来给作用域对象设置初始状态,并添加自定义行为。

    当我们在创建新的控制器时,angularJS会帮我们生成并传递一个新的$scope对象给这个controller,在angularJS应用的中的任何一个部分,都有父级作用域的存在,顶级就是ng-app所在的层级,它的父级作用域就是$rootScope。

    每个$scope的$root指向$rootScope, $cope.$parent指向父级作用域。

    cotroller之间的通信本质上是当前的controller所在的$scope如何跟其他controller上的$scope进行通信。

    方法共有三种:

    利用作用域继承的原理,子控制器访问父级控制器中的内容。
    使用angularJS中的事件,也就是使用$on,$emit,$broadcast进行消息传递
    使用angularJS中的服务

    一:利用作用域继承的原理,子控制器访问父级控制器中的内容。

     app.controller('parent', function($scope) { 
    
            $scope.person = {greeted: false};
    
        });
    
        app.controller('child', function($scope) {
    
            $scope.sayHello = function() {
    
                 $scope.person.name = 'Ari Lerner';
    
            };
    
        });

    二:

    $emit只能向parent controller传递event与data
    $broadcast只能向child controller传递event与data
    $on用于接收event与data

    <div ng-controller="ParentCtrl">                <!--父级-->
        <div ng-controller="SelfCtrl">              <!--自己-->
            <a ng-click="click()">click me</a>
            <div ng-controller="ChildCtrl"></div>   <!--子级-->
        </div>
        <div ng-controller="BroCtrl"></div>         <!--平级-->
    </div>
    app.controller('SelfCtrl', function($scope) {
        $scope.click = function () {
            $scope.$broadcast('to-child', 'child');//向下传递
            $scope.$emit('to-parent', 'parent');//向上传递
        }
    });
    
    app.controller('ParentCtrl', function($scope) {
        $scope.$on('to-parent', function(event,data) {
            console.log('ParentCtrl', data);       //父级能得到值
        });
        $scope.$on('to-child', function(event,data) {
            console.log('ParentCtrl', data);       //子级得不到值
        });
    });

    三:利用angularJS中service单例模式的特性,服务(service)提供了一种能在应用的整个生命周期内保持数据的方式,能够在控制器之间进行通信,且能保证数据的一致性。

    一般我们都会封装server来为应用提供访问数据的接口,或者跟远程进行数据交互。

    var myApp = angular.module("myApp", []);
    myApp.factory('Data', function() {
      return {
        name: "Ting"
      }
    });
    
    myApp.controller('FirstCtrl', function($scope, Data) {
      $scope.data = Data;
      $scope.setName = function() {
        Data.name = "Jack";
      }
    });
    
    myApp.controller('SecondCtrl', function($scope, Data) {
      $scope.data = Data;
      $scope.setName = function() {
        Data.name = "Moby";
      }
    });
  • 相关阅读:
    基于python的知乎开源爬虫 zhihu_oauth使用介绍
    python scrapy 抓取脚本之家文章(scrapy 入门使用简介)
    模拟退火算法(SA)求解TSP 问题(C语言实现)
    遗传算法的C语言实现(二)-----以求解TSP问题为例
    遗传算法的C语言实现(一):以非线性函数求极值为例
    C语言实现粒子群算法(PSO)二
    C语言实现粒子群算法(PSO)一
    python wordcloud 对电影《我不是潘金莲》制作词云
    svn更新失败,解决
    java发送邮箱验证码
  • 原文地址:https://www.cnblogs.com/bruce-gou/p/6382450.html
Copyright © 2011-2022 走看看