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

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

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

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

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

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

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

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

<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()這三個方法。

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

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

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

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

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

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

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

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

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

$scope.$on(name,listener)

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

參照以下例子,在一個控制器修改了變量的值,在另一個控制器中會偵聽到修改后的值,并根據(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();
});

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

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()這兩個方法
  $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é)到此,歡迎大家批評指正交流!

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

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

相關(guān)文章

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

    AngularJS中指令的四種基本形式實例分析

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

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

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

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

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

    Angularjs過濾器使用詳解

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

    詳解Angularjs中的依賴注入

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

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

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

    基于angularJS的表單驗證指令介紹

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

    Angular中樣式綁定解決方案

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

    Angularjs之filter過濾器(推薦)

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

    AngularJS中使用three.js的實例詳解

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

最新評論

临猗县| 深水埗区| 横峰县| 哈密市| 通道| 屯留县| 共和县| 四会市| 金湖县| 咸阳市| 弥渡县| 故城县| 墨竹工卡县| 辉南县| 汉阴县| 博罗县| 福贡县| 阜城县| 于都县| 汉阴县| 阜平县| 济阳县| 宜章县| 基隆市| 高雄县| 海淀区| 东平县| 类乌齐县| 宁陵县| 曲松县| 大宁县| 涡阳县| 新龙县| 抚宁县| 鞍山市| 东源县| 襄樊市| 商水县| 曲靖市| 堆龙德庆县| 长子县|