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

Angularjs實(shí)現(xiàn)控制器之間通信方式實(shí)例總結(jié)

 更新時(shí)間:2018年03月27日 10:43:25   作者:Web魔法師  
這篇文章主要介紹了Angularjs實(shí)現(xiàn)控制器之間通信方式,結(jié)合實(shí)例形式總結(jié)分析了AngularJS控制器常用通信方式及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Angularjs實(shí)現(xiàn)控制器之間通信方式。分享給大家供大家參考,具體如下:

利用angularjs開發(fā)項(xiàng)目中,控制器之間的通信,比如參數(shù)的傳遞,數(shù)據(jù)的傳遞,都是比較常見的??刂破髦g的通信,顯得尤為重要。常見的方式有如下兩種:一、angular服務(wù)的方式;二、基于事件廣播的方式;另外,還有基于作用域繼承的方式。下面先說一下前兩種方式:

一、基于angular服務(wù)的方式:

在angular中服務(wù)是一個(gè)單例,所以在服務(wù)中生成一個(gè)對(duì)象,該對(duì)象就可以利用依賴注入的方式在所有的控制器中共享。參照以下例子,在一個(gè)控制器修改了服務(wù)對(duì)象的值,在另一個(gè)控制器中獲取到修改后的值:

var app = angular.module('myApp', []);
app.factory('Myservice', function(){
 return {};
});
//定義服務(wù)
app.controller('Ctrltest1', function($scope, 'Myservice') {
 $scope.change = function() {
  Myservice.name = $scope.test; //在第一個(gè)控制器中為服務(wù)對(duì)象賦值
 };
});
app.controller('Ctrltst2', function($scope, 'Myservice') {
 $scope.add = function() {
  $scope.name = Myservice.name; //將第一個(gè)控制器中為服務(wù)對(duì)象賦的值傳給第二個(gè)控制器
 };
});

<div ng-controller='Ctrltest1'>
  <input type="text" ng-model="test" />
  <div ng-click="change()">click me</div>
</div>
<div ng-controller='Ctrltest2'>
 <div ng-click="add()">my name {{name}}</div>
</div>

二、基于事件廣播的方式

基于事件廣播,需要用到$emit()$broadcaset()$emit()這三個(gè)方法。

1. 向父作用域?qū)哟谓Y(jié)構(gòu)發(fā)出自定義事件:使用$emit()方法,scope.$emit(name,[args,...])

注:name是事件名,args 是0個(gè)或多個(gè)參數(shù)。

應(yīng)用場景:用于子頁面控制器向父頁面的控制器傳遞參數(shù)。

2. 向子作用域?qū)哟谓Y(jié)構(gòu)廣播自定義事件:

應(yīng)用場景:用于父頁面控制器向子頁面的控制器傳遞參數(shù)或者同級(jí)控制器之間傳遞參數(shù)。

使用$broadcaset()方法,$scope.$broadcaset(name,[args,...])

注:name是事件名,args 是0個(gè)或多個(gè)參數(shù).

3. 使用偵聽器處理自定義事件

為了處理發(fā)出或廣播的事件,可以使用$on()方法。$on()方法將使用下面的語法:

$scope.$on(name,listener)

注:name 是將要偵聽的事件的名字,listener參數(shù)是一個(gè)函數(shù),它將接受事件作為第一個(gè)參數(shù),接受$emit()或者$broadcaset()方法傳遞的其他所有參數(shù)作為隨后的參數(shù)。$on()方法主要用于監(jiān)聽$emit()$broadcaset()方法中事件的變化,例如這兩個(gè)方法中如果有變量發(fā)生改變,$on()方法將會(huì)獲取到該變量的改變。

參照以下例子,在一個(gè)控制器修改了變量的值,在另一個(gè)控制器中會(huì)偵聽到修改后的值,并根據(jù)修改后的值,做出響應(yīng)。

app.controller('versiontaskCtrl', function WriteTestcaseCtrl($scope, $cookies, $rootScope, $modal, $stateParams, ui, searchVariable, currentuserversions,) {
 $scope.taskId = $cookies['edit_taskId'];
 $scope.versionid = parseInt($cookies['edit_versionId']);
 $scope.versionName = $cookies['edit_versionName'];
 $scope.version = $scope.versionid;
 getuserversions = function () {
  currentuserversions.get(function (res) {
   $scope.versions = res;
  });
 };
 reload = function () {
  getuserversions();
 };
 $scope.changeVersionid = function (v) {
  console.log(v);
  $scope.$broadcast('versionidChange', $scope.versionid); //向其他控制器廣播$scope.versionid值的變化。
 };
 reload();
});

第二個(gè)控制器中監(jiān)聽第一個(gè)控制器中的廣播事件:

app.controller('SchemeTaskEditableRowCtrl', function ($scope, $rootScope, $cookies, $filter, $http, $window, $stateParams, basetasksService, schemetasksService, UserService) {
 $scope.taskId = $cookies['edit_taskId'];
 $scope.versionid = $cookies['edit_versionId'];
 $scope.version = $scope.versionid;
 var userid = $rootScope.user.userid;
 $scope.schemetask = [];
 $scope.basetask = [];
 $scope.result = [];
 $scope.$on('versionidChange', function (event, versionid) {
  $scope.versionid = versionid; //監(jiān)聽到$scope.versionid值的變化。然后調(diào)用 $scope.schemeTask()和$scope.getUsers()這兩個(gè)方法
  $scope.schemeTask();
  $scope.getUsers();
 });
 $scope.schemeTask = function () {
  $scope.tasks = [];
  $scope.schemetask = [];
  schemetasksService.get({version: $scope.versionid}, function (res) {
   $scope.schemetask_collection = res.results;
   //console.log($scope.schemetask_collection);
   $scope.schemetask_displayed = [].concat($scope.schemetask_collection);
   var i = 1;
   angular.forEach($scope.schemetask_collection, function (item) {
    item['director'] = "app.writetestitem" + "({taskid:" + item.id + "})";
    item['number'] = i;
    i++;
    $scope.schemetask.push(item);
   });
   $scope.tasks = $scope.schemetask;
  });
 };
 $scope.getUsers = function () {
  UserService.get(function (res) {
   $scope.users = res.results;
   $scope.usersDisplayed = [].concat($scope.users);
   $scope.itemArray = [];
   $scope.userArray = [];
   $scope.names = [];
   angular.forEach($scope.users, function (item) {
    $scope.itemArray.push(item);
    $scope.userArray.push(item.name + item.number);
    var itemname = {'name': item.name, 'number': item.number};
    $scope.names.push(itemname);
   });
   $scope.selected = $scope.users;
  });
 };
});

關(guān)于Angularjs控制器之間通信方式,暫且總結(jié)到此,歡迎大家批評(píng)指正交流!

更多關(guān)于AngularJS相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《AngularJS指令操作技巧總結(jié)》、《AngularJS入門與進(jìn)階教程》及《AngularJS MVC架構(gòu)總結(jié)

希望本文所述對(duì)大家AngularJS程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • AngularJS中指令的四種基本形式實(shí)例分析

    AngularJS中指令的四種基本形式實(shí)例分析

    這篇文章主要介紹了AngularJS中指令的四種基本形式,結(jié)合實(shí)例形式分析了AngularJS指令的定義、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-11-11
  • angular4自定義組件非input元素實(shí)現(xiàn)ngModel雙向數(shù)據(jù)綁定的方法

    angular4自定義組件非input元素實(shí)現(xiàn)ngModel雙向數(shù)據(jù)綁定的方法

    這篇文章主要介紹了angular4自定義組件非input元素實(shí)現(xiàn)ngModel雙向數(shù)據(jù)綁定的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • angular中如何綁定iframe中src的方法

    angular中如何綁定iframe中src的方法

    這篇文章主要介紹了angular中如何綁定iframe中src的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • Angularjs過濾器使用詳解

    Angularjs過濾器使用詳解

    AngularJS提供了過濾器來對(duì)輸入輸出數(shù)據(jù)格式化。這篇文章主要介紹了Angularjs過濾器使用的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • 詳解Angularjs中的依賴注入

    詳解Angularjs中的依賴注入

    這篇文章主要為大家詳細(xì)介紹了Angularjs中的依賴注入,AngularJS提供了一個(gè)至高無上的依賴注入機(jī)制,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Angularjs中的頁面訪問權(quán)限怎么設(shè)置

    Angularjs中的頁面訪問權(quán)限怎么設(shè)置

    最近一直在忙一個(gè)手機(jī)端的項(xiàng)目,所以對(duì)js學(xué)習(xí)有點(diǎn)松撤了。今天小編抽時(shí)間跟大家分享一篇關(guān)于angularjs中的頁面訪問權(quán)限設(shè)置教處,對(duì)angularjs訪問權(quán)限感興趣的朋友一起學(xué)習(xí)吧
    2016-11-11
  • 基于angularJS的表單驗(yàn)證指令介紹

    基于angularJS的表單驗(yàn)證指令介紹

    下面小編就為大家?guī)硪黄赼ngularJS的表單驗(yàn)證指令介紹。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-10-10
  • Angular中樣式綁定解決方案

    Angular中樣式綁定解決方案

    這篇文章主要介紹了Angular中樣式綁定解決方案,使用ngClass和ngStyle可以進(jìn)行樣式的綁定,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Angularjs之filter過濾器(推薦)

    Angularjs之filter過濾器(推薦)

    這篇文章主要介紹了Angularjs之filter過濾器的相關(guān)資料,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • AngularJS中使用three.js的實(shí)例詳解

    AngularJS中使用three.js的實(shí)例詳解

    這篇文章主要介紹了AngularJS中使用three.js的實(shí)例詳解,我將之前自己做的demo放到了angularJS的一個(gè)component中,其實(shí)一開始是沒有準(zhǔn)備用框架的但是后面發(fā)現(xiàn)需要進(jìn)行的雙向綁定越來越多,后期表單數(shù)據(jù)的變化量也很大,最后還是選擇用NG來做這些事情
    2017-07-07

最新評(píng)論

泾源县| 清镇市| 崇阳县| 芮城县| 绥棱县| 共和县| 华池县| 柞水县| 扶绥县| 长沙市| 海淀区| 越西县| 鄂伦春自治旗| 乐东| 塘沽区| 丁青县| 五大连池市| 洛宁县| 家居| 定远县| 璧山县| 和龙市| 勐海县| 凤台县| 武冈市| 措美县| 青铜峡市| 黔南| 武邑县| 兴隆县| 房产| 蒙自县| 仁布县| 祁东县| 西乌珠穆沁旗| 罗山县| 克山县| 乌鲁木齐市| 南岸区| 叙永县| 鞍山市|