欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Angular中$broadcast和$emit的使用方法詳解

 更新時(shí)間:2017年05月22日 10:43:15   作者:justforuse  
本篇文章主要介紹了Angular中$broadcast和$emit的使用方法詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

要在控制器之間傳遞變量變化需要使用angular中的$broadcast和$emit方法來傳遞,同時(shí)使用$on來接收事件并作出響應(yīng)。

broadcast譯為廣播,即上級(jí)傳遞下級(jí)。

示例代碼:

<script src="../angular.js"></script>
<script>
angular.module("app", [])
  .controller("child", function($scope) {
    $scope.$on("parentChange", function(e, m) {
      $scope.change = "changed";
      $scope.child = m;
    })
  })
  .controller("parent", function($scope) {
    $scope.$watch("parent", function(n, o) {
      if (n == o) {
        return;
      }
      $scope.$broadcast("parentChange", n)
    })
  })
</script>

<body>
  <div ng-controller="parent">
    Parent: {{parent}}
    <input type="text" ng-model="parent">

    <div ng-controller="child">
      {{change}} Child: {{child}}
    </div>
  </div>
</body>

上述代碼使用$watch監(jiān)聽parent的值的變化,當(dāng)發(fā)生變化時(shí)就會(huì)“廣播”出parentChange事件并傳遞了參數(shù)(輸入框的值),此時(shí)子元素作用域中使用了$scope.$on("parentChange, handler)" 來接收parentChange事件,然后接受輸入框的值并賦值給子作用域中的child變量。 這樣就完成了值的傳遞。

效果:

這里寫圖片描述

emit譯為發(fā)射,即下級(jí)傳遞上級(jí)。

示例代碼:

<script src="../angular.js"></script>
<script>
angular.module("app", [])
  .controller("parent", function($scope) {
    $scope.$on("childChange", function(e, m) {
      $scope.change = "changed";
      $scope.parent = m
    })
  })
  .controller("child", function($scope) {
    $scope.$watch("child", function(n, o) {
      if (n == o) {
        return;
      }
      $scope.$emit("childChange", n)
    })
  })
</script>


<body ng-controller="parent">
  {{change}} Parent: {{parent}}
  <div ng-controller="child">
    Child: {{child}}
    <input type="text" ng-model="child">
  </div>
</body>

當(dāng)子元素的child值發(fā)生變化時(shí),會(huì)向上級(jí)發(fā)出childChange事件,此時(shí)父元素正在監(jiān)聽的$on(“childChange”)會(huì)做出響應(yīng),將傳遞的參數(shù)賦值給parent,整個(gè)流程與 broadcast類似。

效果:

這里寫圖片描述

上述作用域均存在層級(jí)關(guān)系,如果對(duì)于同級(jí)的作用域該如何做呢?

我們可以使用服務(wù)來廣播事件:

<script src="../angular.js"></script>
<script>
angular.module("app", [])
  .service("myServive", function($rootScope) {
    return {
      change: function(n) {
        $rootScope.$broadcast("valueChange", n);

      }
    }
  })
  .controller("bro1", function($scope, myServive) {
    $scope.$watch("value1", function(n) {
      myServive.change(n);
    })

    $scope.$on("valueChange", function(e, m) {
      console.log("value1");
      $scope.value1 = m;
    })
  })
  .controller("bro2", function($scope, myServive) {
    $scope.$watch("value2", function(n) {
      myServive.change(n);
    })

    $scope.$on("valueChange", function(e, m) {
      console.log("value2");
      $scope.value2 = m;
    })
  })
</script>


<body>
  <div ng-controller="bro1">
    <h3> value1:</h3>
    <input type="text" ng-model="value1">
  </div>
  <div ng-controller="bro2">
    <h3>value2:</h3>
    <input type="text" ng-model="value2">
  </div>
</body>

我們?cè)诜?wù)中運(yùn)用了$rootScope,所有的作用域都從屬于它,基于這點(diǎn),我們可以在根作用域中廣播事件,$rootScope.$broadcast("valueChange", n);,當(dāng)每個(gè)子作用域中的值發(fā)生變化時(shí)我們都會(huì)調(diào)用服務(wù)中的change 方法來廣播這個(gè)事件,同時(shí)每個(gè)作用域又都在監(jiān)聽$on("valueChange") 事件并作出相應(yīng)處理,這樣就實(shí)現(xiàn)了子作用域中的值會(huì)傳遞給兄弟作用域了。

效果為:

這里寫圖片描述

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • angularJS實(shí)現(xiàn)表格部分列展開縮起示例代碼

    angularJS實(shí)現(xiàn)表格部分列展開縮起示例代碼

    這篇文章主要介紹了angularJS實(shí)現(xiàn)表格部分列展開縮起示例代碼,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • angularJS結(jié)合canvas畫圖例子

    angularJS結(jié)合canvas畫圖例子

    這篇文章主要介紹了angularJS結(jié)合canvas畫圖例子的方法,需要的朋友可以參考下
    2015-02-02
  • 理解AngularJs篇:30分鐘快速掌握AngularJs

    理解AngularJs篇:30分鐘快速掌握AngularJs

    這篇文章主要介紹了理解AngularJs篇:30分鐘快速掌握AngularJs,詳細(xì)介紹了AngularJs所涉及的知識(shí)點(diǎn),有興趣的可以了解一下。
    2016-12-12
  • Angular組件間通信的新解決方案詳解

    Angular組件間通信的新解決方案詳解

    本文通過對(duì)比幾種Angular組件間的通信方式,給大家介紹了一種新的Angular組件間通信的解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • angularJS Provider、factory、service詳解及實(shí)例代碼

    angularJS Provider、factory、service詳解及實(shí)例代碼

    這篇文章主要介紹了angularJS Provider詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 淺談angular懶加載的一些坑

    淺談angular懶加載的一些坑

    下面小編就為大家?guī)硪黄獪\談angular懶加載的一些坑。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • 詳解AngularJs中$resource和restfu服務(wù)端數(shù)據(jù)交互

    詳解AngularJs中$resource和restfu服務(wù)端數(shù)據(jù)交互

    之前小編和大家分享過使用$http同服務(wù)器進(jìn)行通信,但是功能上比較簡單,angularjs還提供了另外一個(gè)可選的服務(wù)$resource,使用它可以非常方便的同支持restful的服務(wù)單進(jìn)行數(shù)據(jù)交互。下面來一起看看吧。
    2016-09-09
  • 詳解Angular16如何獲取路由參數(shù)

    詳解Angular16如何獲取路由參數(shù)

    這篇文章主要為大家介紹了Angular16如何獲得路由參數(shù)的實(shí)現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 簡單講解AngularJS的Routing路由的定義與使用

    簡單講解AngularJS的Routing路由的定義與使用

    這篇文章主要介紹了AngularJS的Routing路由的定義與使用,講解了when()和otherwise()兩個(gè)相關(guān)的常用方法,需要的朋友可以參考下
    2016-03-03
  • AngularJS延遲加載html template

    AngularJS延遲加載html template

    這篇文章主要介紹了AngularJS延遲加載html template 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07

最新評(píng)論