最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

AngularJS控制器之間的數(shù)據(jù)共享及通信詳解

 更新時(shí)間:2016年08月01日 15:41:23   投稿:daisy  
本文詳細(xì)介紹了AngularJS控制器之間的數(shù)據(jù)共享與通信,對(duì)angularjs共享數(shù)據(jù)及通信相關(guān)知識(shí)感興趣的朋友可以一起學(xué)習(xí)。

AngularJS 本身已經(jīng)提供了像指令 Directive 和 服務(wù) Service 一類(lèi)的方式,來(lái)實(shí)現(xiàn)數(shù)據(jù)和代碼的共享和復(fù)用,但在實(shí)際的項(xiàng)目開(kāi)發(fā)中,或許是處于懶惰,亦或是為了便利,總會(huì)想在兩個(gè)控制器之間,直接進(jìn)行數(shù)據(jù)的共享通信,或者是函數(shù)與方法的調(diào)用,這里我們就看看有哪些方法可以滿足這個(gè)要求。

單例服務(wù)

單例服務(wù)是 AngularJS 本身支持的數(shù)據(jù)和代碼共享方式,因?yàn)槭菃卫?,所有的控制器訪問(wèn)的便是同一份數(shù)據(jù)。比如,下面的 Service 便可以實(shí)現(xiàn):

angular
 .module('app')
 .service('ObjectService', [ObjectService]);
function ObjectService() {
 var list = {};
 return {
  get: function(id){
   return list[id];
  },
  set: function(id, v){
   list[id] = v;
  }
 };
}

在一個(gè)控制器中,調(diào)用 ObjectService.set('i', 1) 設(shè)置的數(shù)據(jù),在其它控制器中,便可以通過(guò) ObjectService.get('i') 來(lái)獲取。

廣播與事件

AngularJS 中在觸發(fā)事件和發(fā)送廣播時(shí),都可以傳遞參數(shù),可以通過(guò)這一特性,來(lái)實(shí)現(xiàn)數(shù)據(jù)的共享。與事件和廣播相關(guān)的,共有三個(gè)方法,分別是:

    1.$emit():觸發(fā)事件,它可以向上傳遞數(shù)據(jù),比如,子控制器向父控制器,還有控制器向 $rootScope

    2.$broadcast():發(fā)送廣播,它可以向下傳遞數(shù)據(jù),比如,父控制器向子控制器傳遞數(shù)據(jù),或者 $rootScope 向任意控制器傳遞數(shù)據(jù)

    3.$on():監(jiān)聽(tīng)事件與廣播,可以捕獲 $emit $broadcast

可以將控制器之間的通信,分為三種情形:

    1.無(wú)直接關(guān)聯(lián)的控制器:使用 $rootScope.$emit()、$rootScope.$boardcast() $scope.$emit 來(lái)發(fā)出數(shù)據(jù),通過(guò) $rootScope.$on() 來(lái)獲取數(shù)據(jù)

    2.父控制器到子控制器:父控制器使用 $scope.$boradcast() 來(lái)發(fā)送數(shù)據(jù),子控制器通過(guò) $scope.$on() 來(lái)獲取數(shù)據(jù)

    3.子控制器至父控制器:子控制器使用 $scope.$emit() 來(lái)發(fā)送數(shù)據(jù),父控制器通過(guò) $scope.$on() 來(lái)獲取數(shù)據(jù)

下面是簡(jiǎn)單的用法:

// one controller
angular
 .module('app')
 .controller('OneController', ['$scope', OneController]);
function OneController($scope){
 var data = {value: 'test'};
 $rootScope.$broadcast('open.notice.editor', data);
}

// other controller
angular
 .module('app')
 .controller('AnotherController', ['$scope', AnotherController]);
function AnotherController($scope){
 $scope.$on('open.notice.editor', function(event, data){
  $scope.open(data);
  $scope.$emit('notice.editor.opened');
 });
}

父控制器

如果兩個(gè)控制器共同擁有同一個(gè)父控制器,則可以通過(guò)父控制器來(lái)進(jìn)行數(shù)據(jù)共享和通信。比如:

<div ng-controller="ParentController">
 <div ng-controller="ChildOneController"></div>
 <div ng-controller="ChildTwoController"></div>
</div>
// 父控制器
angular
 .module('app')
 .controller('ParentController', ['$scope', ParentController]);
function ParentController($scope){
 // 用于傳遞數(shù)據(jù)的變量
 $scope.data = null;
}

// 子控制器
angular
 .module('app')
 .controller('ChildOneController', ['$scope', ChildOneController]);
function ChildOneController($scope){
 // 數(shù)據(jù)設(shè)置
 $scope.$parent.data = 1;
}

// 子控制器
angular
 .module('app')
 .controller('ChildTwoController', ['$scope', '$timeout', ChildTwoController]);
function ChildTwoController($scope, $timeout){
 $timeout(function(){
  // 數(shù)據(jù)讀取
  console.log($scope.$parent.data);
 }, 1000);
}

全局或共用的變量

AngularJS 提供了對(duì) window localStorage 兩個(gè)變量的封裝,$window $localStorage ,通過(guò)修改和監(jiān)聽(tīng)這兩個(gè)值,可以達(dá)到在控制器之間數(shù)據(jù)共享和通信的目的。方法如下:

// one controller
angular
 .module('app')
 .controller('OneController', ['$scope', '$window', OneController]);
function OneController($scope, $window){
 // 數(shù)據(jù)設(shè)置
 $window.data = 1;
}

// other controller
angular
 .module('app')
 .controller('AnotherController', ['$scope', AnotherController]);
function AnotherController($scope){
 // 監(jiān)聽(tīng)修改
 $scope.$watch(function(){
  return $window.data;
 }, function(n){
  $scope.windowData = n;
 });
}

其實(shí),這種監(jiān)聽(tīng)修改的方式,也可以用在其它通信方式中。

元素綁定

AngularJS 中,可以通過(guò)一個(gè)元素,來(lái)獲取其上的控制器實(shí)例。通過(guò)這種方式便可以快速的獲取
修改某個(gè)控制器中的數(shù)據(jù),或者調(diào)用這個(gè)控制器中的方法。比如:

<div ng-controller="AppController">
 <div id="div-a"></div>
</div>

可以通過(guò)以下的方法,來(lái)獲取控制器實(shí)例:

var instance = angular.element(document.getElementById('div-a')).scope();

接著,便可以通過(guò)這個(gè) instance 來(lái)調(diào)用控制器的方法,獲取和修改值了。無(wú)法是元素本身綁定有控制器,還是元素的父級(jí)元素綁定有控制器,都可以成功的獲取。

本文關(guān)于Angular控制器之間的數(shù)據(jù)共享與通信就介紹到這了,對(duì)angularjs共享數(shù)據(jù)相關(guān)知識(shí)感興趣的朋友可以一起學(xué)習(xí),謝謝大家支持腳本之家。

相關(guān)文章

  • Angular中管道操作符(|)的使用方法

    Angular中管道操作符(|)的使用方法

    通常我們需要使用管道實(shí)現(xiàn)對(duì)數(shù)據(jù)的格式化,下面這篇文章主要給大家介紹了關(guān)于Angular中管道操作符(|)的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • angular實(shí)現(xiàn)頁(yè)面打印局部功能的思考與方法

    angular實(shí)現(xiàn)頁(yè)面打印局部功能的思考與方法

    這篇文章主要給大家介紹了關(guān)于angular實(shí)現(xiàn)頁(yè)面打印局部功能的思考與方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • Angularjs實(shí)現(xiàn)多圖片上傳預(yù)覽功能

    Angularjs實(shí)現(xiàn)多圖片上傳預(yù)覽功能

    這篇文章主要介紹了Angularjs實(shí)現(xiàn)多圖片上傳預(yù)覽功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • AngularJS入門(mén)(用ng-repeat指令實(shí)現(xiàn)循環(huán)輸出

    AngularJS入門(mén)(用ng-repeat指令實(shí)現(xiàn)循環(huán)輸出

    這篇文章主要介紹了AngularJS入門(mén)(用ng-repeat指令實(shí)現(xiàn)循環(huán)輸出,需要的朋友可以參考下
    2016-05-05
  • Angular2 多級(jí)注入器詳解及實(shí)例

    Angular2 多級(jí)注入器詳解及實(shí)例

    這篇文章主要介紹了Angular2 多級(jí)注入器詳解的相關(guān)資料,并附簡(jiǎn)單實(shí)例代碼,需要的朋友可以參考下
    2016-10-10
  • angularJS實(shí)現(xiàn)動(dòng)態(tài)添加,刪除div方法

    angularJS實(shí)現(xiàn)動(dòng)態(tài)添加,刪除div方法

    下面小編就為大家分享一篇angularJS實(shí)現(xiàn)動(dòng)態(tài)添加,刪除div方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • 詳解AngularJS controller調(diào)用factory

    詳解AngularJS controller調(diào)用factory

    本篇文章主要介紹了詳解AngularJS controller調(diào)用factory,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • AngularJS表格樣式簡(jiǎn)單設(shè)置方法示例

    AngularJS表格樣式簡(jiǎn)單設(shè)置方法示例

    這篇文章主要介紹了AngularJS表格樣式簡(jiǎn)單設(shè)置方法,結(jié)合實(shí)例形式分析了AngularJS結(jié)合bootstrap針對(duì)表格樣式的相關(guān)設(shè)置技巧,需要的朋友可以參考下
    2017-03-03
  • 淺談angularjs module返回對(duì)象的坑(推薦)

    淺談angularjs module返回對(duì)象的坑(推薦)

    下面小編就為大家?guī)?lái)一篇淺談angularjs module返回對(duì)象的坑(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • 淺談對(duì)Angular中的生命周期鉤子的理解

    淺談對(duì)Angular中的生命周期鉤子的理解

    本篇文章主要介紹了Angular中的生命周期鉤子的理解,詳細(xì)的介紹了生命周期鉤子和主要的生命周期鉤子,有興趣的可以了解一下
    2017-07-07

最新評(píng)論

砀山县| 游戏| 依安县| 韶关市| 汝州市| 恭城| 化德县| 灌阳县| 陆丰市| 瑞丽市| 赞皇县| 浙江省| 楚雄市| 英超| 澜沧| 鞍山市| 太仓市| 泗阳县| 杨浦区| 崇礼县| 乌拉特前旗| 德江县| 赫章县| 江华| 健康| 和田市| 尼木县| 岑溪市| 东乌珠穆沁旗| 莱西市| 东港市| 华蓥市| 宁德市| 大冶市| 清水河县| 凌源市| 晋江市| 高雄市| 兴业县| 全州县| 商河县|