首頁 > web前端 > js教程 > 主體

淺談angular控制器通訊的4種方式

青灯夜游
發布: 2021-05-14 11:07:59
轉載
2111 人瀏覽過

本篇文章跟大家介紹一下angular控制器通訊的4種方式。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

淺談angular控制器通訊的4種方式

【相關推薦:《angular教學》】

先概括angular控制器通訊的4種方式:

  • 作用域繼承。

  • 透過$scope廣播事件。

  • 事件發射器模組。

  • 服務。

1、作用域的繼承

子作用域可以存取宣告在它們的祖先作用域中的變數和函數。

<div ng-controller="Controller1">
	<div ng-controller="Controller2">
		this prints '42':{{answer}}
	</div>
</div>
m.controller('Controller1', function ($scope) {
	$scope.answer = 42;
});
m.controller('Controller2', function ($scope) {
	console.log($scope.answer);
});
登入後複製

2、透過$scope廣播事件

$emit呼叫可以向作用域上方冒泡,$broadcast將向子孫作用域傳播,$on可以註冊監聽器。

<div ng-controller="Controller1">
	<div ng-controller="Controller2">
	
	</div>
</div>
m.controller('Controller1', function ($scope) {
	$scope.$on('ping', function (){
		console.log('pong');
	});
	$scope.$broadcast('broadcast');
});
m.controller('Controller2', function ($scope) {
	$scope.$emit('ping');
	$scope.$on('broadcast', function (){
		console.log('broadcast');
	});
});
登入後複製

3、事件發射器模組event-emitter

event-emitter模組運作方式類似於作用域發射器,它們有3個關鍵的差異:

  • event-emitter是獨立於作用域的,所以在無法存取作用域的服務中使用它是非常理想的。

  • 將使用的函數命名為.on(),.emit()。

  • 沒有對應的$broadcast()函數。

<script type="text/javascript" src="angular.js"></script>
<script type="text/javascript" src="event-emitter.js"></script>
<script type="text/javascript">
	var app = angular.module('app', []);
 
	app.factory('userService', function ($timeout, $window) {
		var emitter = $window.emitter();
		var user = {};
 
		//模拟http错误
		$timeout(function () {
			user.emit('error', 'Could not connect to server');
		}, 1000);
 
		return user;
	});
 
	app.factory('profileService', function (userService) {
		var ret = {
			user: userService,
		};
 
		userService.on('error', function () {
			console.log('get error');
		});
 
		return ret;
	});
</script>
登入後複製

4、最常用的通訊是服務

因為服務是單例,所以在任何元件內改變服務的值都會影響其他元件,用法很簡單,只要把服務列為依賴就可以了,如上述程式碼所示。

更多程式相關知識,請造訪:程式設計教學! !

以上是淺談angular控制器通訊的4種方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板