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

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)用場(chǎng)景:用于子頁面控制器向父頁面的控制器傳遞參數(shù)。

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

應(yīng)用場(chǎ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)文章

  • Angular實(shí)現(xiàn)搜索框及價(jià)格上下限功能

    Angular實(shí)現(xiàn)搜索框及價(jià)格上下限功能

    這篇文章主要為大家詳細(xì)介紹了Angular實(shí)現(xiàn)搜索框及價(jià)格上下限功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Angular2 Service實(shí)現(xiàn)簡(jiǎn)單音樂播放器服務(wù)

    Angular2 Service實(shí)現(xiàn)簡(jiǎn)單音樂播放器服務(wù)

    本篇文章主要介紹了Angular2 Service實(shí)現(xiàn)簡(jiǎn)單音樂播放器服務(wù) ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Angular項(xiàng)目如何使用攔截器?httpClient?請(qǐng)求響應(yīng)處理

    Angular項(xiàng)目如何使用攔截器?httpClient?請(qǐng)求響應(yīng)處理

    這篇文章主要介紹了Angular項(xiàng)目簡(jiǎn)單使用攔截器httpClient請(qǐng)求響應(yīng)處理,目前我的Angular版本是Angular?17.3,版本中實(shí)現(xiàn)請(qǐng)求和響應(yīng)的攔截處理了,這種機(jī)制非常適合添加如身份驗(yàn)證頭、錯(cuò)誤統(tǒng)一處理、日志記錄等功能,需要的朋友可以參考下
    2024-06-06
  • angularjs下拉框空白的解決辦法

    angularjs下拉框空白的解決辦法

    這篇文章主要為大家詳細(xì)介紹了angularjs下拉框空白的解決方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Angularjs中使用layDate日期控件示例

    Angularjs中使用layDate日期控件示例

    本篇文章主要介紹了Angularjs中使用layDate日期控件,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • Angular 4.x中表單Reactive Forms詳解

    Angular 4.x中表單Reactive Forms詳解

    這篇文章主要介紹了Angular 4.x中表單Reactive Forms的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • 詳解Angular中通過$location獲取地址欄的參數(shù)

    詳解Angular中通過$location獲取地址欄的參數(shù)

    這篇文章主要介紹了詳解 Angular中通過$location獲取地址欄的參數(shù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 使用AngularJS中的SCE來防止XSS攻擊的方法

    使用AngularJS中的SCE來防止XSS攻擊的方法

    這篇文章主要介紹了使用AngularJS中的SCE來防止XSS攻擊的方法,依靠合理地轉(zhuǎn)碼為HTML來預(yù)防跨站腳本漏洞共計(jì),需要的朋友可以參考下
    2015-06-06
  • 深入聊一聊Angular開發(fā)的內(nèi)容

    深入聊一聊Angular開發(fā)的內(nèi)容

    使用Angular開發(fā)需要非常多的前置知識(shí),比如TypeScript、RxJS等,所以學(xué)習(xí)成本比較高,下面這篇文章主要給大家關(guān)于Angular開發(fā)內(nèi)容的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • AngularJS實(shí)現(xiàn)表格的增刪改查(僅限前端)

    AngularJS實(shí)現(xiàn)表格的增刪改查(僅限前端)

    這篇文章主要介紹了AngularJS實(shí)現(xiàn)表格的增刪改查,僅限前端,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評(píng)論