国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

Angular.js中控制器之間的傳值詳解

2024-05-06 15:18:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

每個(gè)controller都會(huì)有自己的scope,所有的scope都是屬于 $rootScope的子或者子的子...

那么問(wèn)題就好解決了,通過(guò) $rootScope.$broadcast 廣播的事件每個(gè)controller都能收到事件

另外,我的經(jīng)驗(yàn)是,盡量不要用event傳數(shù)據(jù)。應(yīng)該建立一個(gè)service來(lái)保存數(shù)據(jù),并且設(shè)置相應(yīng)getter/setter,具體如下:

 每個(gè)controller依賴(lài)service, call service.setter(...)

統(tǒng)一的service.setter(...)在改完數(shù)據(jù)后可以$emit('data-updated')

每個(gè)controller里$on('data-updated', function(){ $scope.data = service.getData() })

通過(guò)Angular的話可以通過(guò)下面四種方法

1、event

這里可以有兩種方式,一種是$scope.$emit,然后通過(guò)監(jiān)聽(tīng)$rootScope的事件獲取參數(shù);另一種是$rootScope.$broadcast,通過(guò)監(jiān)聽(tīng)$scope的事件獲取參數(shù)。

這兩種方法在最新版本的Angular中已經(jīng)沒(méi)有性能區(qū)別了,主要就是事件發(fā)送的方向不同,可以按實(shí)際情況選擇。

2、service

可以創(chuàng)建一個(gè)專(zhuān)用的事件Service,也可以按照業(yè)務(wù)邏輯切分,將數(shù)據(jù)存儲(chǔ)在相應(yīng)的Service中,因?yàn)橐呀?jīng)有人提過(guò)了就不贅述了。

3、$rootScope

這個(gè)方法可能會(huì)比較dirty一點(diǎn),勝在方便,也就是把數(shù)據(jù)存在$rootScope中,這樣各個(gè)子$scope都可以調(diào)用,不過(guò)需要注意一下生命周期

4、直接使用$scope.$nextSibling及類(lèi)似的屬性

類(lèi)似的還有$scope.$parent。這個(gè)方法的缺點(diǎn)就更多了,官方不推薦使用任何$開(kāi)頭的屬性,既增加了耦合,又需要處理異步的問(wèn)題,而且scope的順序也不是固定的。不推薦

另外就是通過(guò)本地存儲(chǔ)、全局變量或者現(xiàn)代瀏覽器的postMessage來(lái)傳遞參數(shù)了,除非特殊情況,請(qǐng)避免這類(lèi)方式。

直接建一個(gè)service,不要用什么事件,項(xiàng)目一大N多個(gè)controller或者N久再去維護(hù)會(huì)玩死你,service里提供存和取的方法,簡(jiǎn)單明了,API容易查找和修改,調(diào)試也方便無(wú)混亂的依賴(lài)關(guān)系

1、利用作用域的繼承方式

由于作用域的繼承是基于js的原型繼承方式,所以這里分為兩種情況,當(dāng)作用域上面的值為基本類(lèi)型的時(shí)候,修改父作用域上面的值會(huì) 影響到子作用域,反之,修改子作用域只會(huì)影響子作用域的值,不會(huì)影響父作用域上面的值;如果需要父作用域與子作用域共享一個(gè)值 的話,就需要用到后面一種,即作用域上的值為對(duì)象,任何一方的修改都能影響另一方,這是因?yàn)樵趈s中對(duì)象都是引用類(lèi)型。

基本類(lèi)型

function Sandcrawler($scope) { $scope.location = "Mos Eisley North"; $scope.move = function(newLocation) { $scope.location = newLocation; }}function Droid($scope) { $scope.sell = function(newLocation) { $scope.location = newLocation; }}// html<div ng-controller="Sandcrawler"> <p>Location: {{location}}</p> <button ng-click="move('Mos Eisley South')">Move</button> <div ng-controller="Droid"> <p>Location: {{location}}</p> <button ng-click="sell('Owen Farm')">Sell</button> </div></div>            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 含山县| 新河县| 娄烦县| 红原县| 缙云县| 无锡市| 阿鲁科尔沁旗| 团风县| 建湖县| 哈密市| 腾冲县| 潜江市| 汉源县| 高淳县| 慈溪市| 江陵县| 揭阳市| 峨边| 乐业县| 岳阳市| 三亚市| 武穴市| 鄂伦春自治旗| 黄平县| 乐业县| 嵊州市| 综艺| 右玉县| 慈利县| 乡宁县| 得荣县| 南江县| 和静县| 灯塔市| 莱芜市| 汝南县| 高邮市| 祥云县| 靖宇县| 大竹县| 海门市|