Anjularjs控制器通訊

2021-07-05 16:55:42 字數 2555 閱讀 3670

anjularjs控制器通訊有三種方式

1,子控制器繼承父控制器中的內容,即利用作用域繼承的方式

2,利用事件的方式,即$on,$emit,$boardcast

3,服務方式,寫乙個服務的單列,然後注入來使用

利用作用域的繼承方式

由於作用域的繼承是基於js的原型繼承方式,所有有兩種情況,當作用域上面為基本資料型別的時候,修改父作用域上面的值會

影響到子作用域,反之,修改子作用域只會影響到子作用域的值,不會影響父作用域上面的值;如果需要父作用域與子作用域共享

乙個值,就需要作用域上的值為乙個物件,任何一方的修改都會影響到另一方,這就是js中物件都是引用型別

基本型別

function

sandcrawler

($scope)

};function

droid

($scope)

}

ng-controller="sandcrawler">

location: p>

ng-click="move('mos eisley south')">movebutton>

ng-controller="droid">

location: p>

ng-click="sell('owen farm')">sellbutton>

div>

div>

物件

function

sandcrawler

($scope);}

function

droid

($scope)

}

ng-controller="sandcrawler">

sandcrawler location: p>

ng-controller="droid">

ng-click="summon('owen farm')">

summon sandcrawler

button>

div>

div>

基於時間的方式

在一般情況下,基於繼承的方法已近能夠滿足大部分情況了,但是這種方式沒有實現兄弟控制器之間的通訊方式,

所以提出基於事件的方式。

基於事件的方式可以使用$on,$emit,$boardcast,這幾個方式來實現,其中$on表示事件監聽,$emit表示向父級以上作用域觸發事件,¥boardcast表示

向上廣播事件

function

sandcrawler

($scope));}

function

droid

($scope)

}

ng-controller="sandcrawler">

sandcrawler location: p>

ng-controller="droid">

droid location: p>

ng-click="summon()">summon sandcrawlerbutton>

div>

div>

向下廣播事件

function

sandcrawler

($scope)

}function

droid

($scope)

);}

ng-controller="sandcrawler">

sandcrawler location: p>

ng-click="recall()">recall droidsbutton>

ng-controller="droid">

droid location: p>

div>

div>

從這個用法我我可以引申出一種兄弟控制間進行通訊的方式,首先我們乙個兄弟控制中向父作用域觸發乙個事件,然後在父作用域中監聽事件,再廣播

給子作用域,這樣通過事件攜帶的引數,實現了資料經過父作用域,在兄弟作用域之間傳播。

在ng中,服務是乙個單例,所以在服務中生成乙個物件,該物件就可以利用依賴注入的方式在所有的控制器中共享。參照下面的例子

在乙個控制器中修改了伺服器物件的值,在另乙個控制器中獲取修改後的值:

()

;});

($scope, instance)

;});

($scope, instance)

;});

ng-controller="mainctrl">

type="text"

ng-model="test" />

ng-click="change()">click mediv>

div>

ng-controller="sidectrl">

ng-click="add()">my name div>

div>

控制器之間的通訊

由於作用域的繼承是基於js的原型繼承方式,所以這裡分為兩種情況,當作用域上面的值為基本型別的時候,修改父作用域上面的值會 影響到子作用域,反之,修改子作用域只會影響子作用域的值,不會影響父作用域上面的值 如果需要父作用域與子作用域共享乙個值 的話,就需要用到後面一種,即作用域上的值為物件,任何一方的...

C MFC 串列埠通訊 光源控制器控制

一.背景 1 平台 vs2010 mfc 64位編譯平台 使用 unicode 字符集 2 字元 字word 位元組byte 位bit 1 字元是指計算機中使用的字母 數字 字和符號。2 1word 2bytes 8bits 3 開發是在vs2010下做的,預設字符集編碼是unicode,但在之前的...

angular 控制器之間的通訊

1,利用作用域的繼承方式 由於作用域的繼承是基於js的原型繼承方式,所以這裡分為兩種情況,當作用域上面的值為基本型別的時候,修改父作用域上面的值會 影響到子作用域,反之,修改子作用域只會影響子作用域的值,不會影響父作用域上面的值 如果需要父作用域與子作用域共享乙個值 的話,就需要用到後面一種,即作用...