詳解AngularJS控制器的使用
控制器在Angularjs中的作用是增強視圖,它實際就是一個函數(shù),用來向視圖中的作用域添加額外的功能,我們用它來給作用域?qū)ο笤O(shè)置初始狀態(tài),并添加自定義行為。
當(dāng)我們在頁面上創(chuàng)建一個控制器時,Angularjs會生成并傳遞一個$scope給這個控制器,由于Angularjs會自動實例化控制器,所以我們只需要寫構(gòu)造函數(shù)即可。下面的例子展示了控制器初始化:
function my Controller($scope){ $scope.msg="hello,world!"; }
上面這個創(chuàng)建控制器的方法會污染全局命名空間,更合理的辦法是創(chuàng)建一個模塊,然后在模塊中創(chuàng)建控制器,如下:
var myApp=angular.module("myApp",[]); myApp.controller("myController",function($scope){ $scope.msg="hello,world!"; })
用內(nèi)置指令ng-click可以將按鈕、鏈接等其他任何DOM元素同點擊事件進行綁定。ng-click指令將瀏覽器中的mouseup事件,同設(shè)置在DOM元素上的事件處理程序綁定在一起(例如,當(dāng)瀏覽器在某個DOM元素上觸發(fā)了點擊事件,函數(shù)就會被調(diào)用)。和前面的例子類似,綁定看起來是這樣的:
<div ng-controller="FirstController"> <h4>The simplest adding machine ever</h4> <button ng-click="add(1)" class="button">Add</button> <a ng-click="subtract(1)" class="button alert">Subtract</a> <h4>Current count: {{ counter }}</h4> </div>
按鈕和鏈接都被綁定在了內(nèi)部$scope的一個操作上,當(dāng)點擊任何一個元素時AngularJS都會調(diào)用相應(yīng)的方法。注意,當(dāng)設(shè)置調(diào)用哪個函數(shù)時,會同時用括號傳遞一個參數(shù)(add(1))
app.controller('FirstController', function($scope) { $scope.counter = 0; $scope.add = function(amount) { $scope.counter += amount; }; $scope.subtract = function(amount) { $scope.counter -= amount; }; });
Angularjs與其他框架的最大區(qū)別在于,控制器并不適合來執(zhí)行DOM操作、格式化或數(shù)據(jù)操作,以及除存儲數(shù)據(jù)模型之外的狀態(tài)維護操作,它只是視圖和$scope之間的橋梁。
控制器嵌套(作用域包含作用域)
AngularJS應(yīng)用的任何一個部分,無論它渲染在哪個上下文中,都有父級作用域存在。對于ng-app所處的層級來講,它的父級作用域就是$rootScope。
默認(rèn)情況下,AngularJS在當(dāng)前作用域中無法找到某個屬性時,便會在父級作用域中進行查找。如果AngularJS找不到對應(yīng)的屬性,會順著父級作用域一直向上尋找,直到抵達$rootScope為止。如果在$rootScope中也找不到,程序會繼續(xù)運行,但視圖無法更新。
通過例子來看一下這個行為。創(chuàng)建一個ParentController,其中包含一個user對象,再創(chuàng)建一個ChildController來引用這個對象:
app.controller('ParentController', function($scope) { $scope.person = {greeted: false}; }); app.controller('ChildController', function($scope) { $scope.sayHello = function() { $scope.person.name = 'Ari Lerner'; }; });
如果我們將ChildController置于ParentController內(nèi)部,那ChildController的$scope對象的父級作用域就是ParentController的$scope對象。根據(jù)原型繼承的機制,我們可以在子作用域中訪問ParentController的$scope對象。
<div ng-controller="ParentController"> <div ng-controller="ChildController"> <a ng-click="sayHello()">Say hello</a> </div> {{ person }} </div>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,幫助大家熟悉AngularJS控制器。
- AngularJS控制器controller正確的通信的方法
- AngularJS控制器之間的數(shù)據(jù)共享及通信詳解
- AngularJS指令與控制器之間的交互功能示例
- AngularJS控制器之間的通信方式詳解
- AngularJS控制器controller給模型數(shù)據(jù)賦初始值的方法
- AngularJS實現(xiàn)自定義指令與控制器數(shù)據(jù)交互的方法示例
- AngularJS開發(fā)教程之控制器之間的通信方法分析
- AngularJS中一般函數(shù)參數(shù)傳遞用法分析
- Angularjs中如何使用filterFilter函數(shù)過濾
- angularjs指令中的compile與link函數(shù)詳解
- AngularJS中控制器函數(shù)的定義與使用方法示例
相關(guān)文章
基于AngularJs + Bootstrap + AngularStrap相結(jié)合實現(xiàn)省市區(qū)聯(lián)動代碼
這篇文章主要給大家介紹基于AngularJs + Bootstrap + AngularStrap相結(jié)合實現(xiàn)省市區(qū)聯(lián)動的實例代碼,非常不錯具有參考借鑒價值,感興趣的朋友一起看看吧2016-05-05AngularJS實現(xiàn)動態(tài)編譯添加到dom中的方法
這篇文章主要介紹了AngularJS實現(xiàn)動態(tài)編譯添加到dom中的方法,結(jié)合實例形式分析了AngularJS動態(tài)編輯構(gòu)建模板的相關(guān)操作技巧,需要的朋友可以參考下2016-11-11angularjs $http調(diào)用接口的方式詳解
今天小編就為大家分享一篇angularjs $http調(diào)用接口的方式詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08angularjs使用div模擬textarea文本框的方法
今天小編就為大家分享一篇angularjs使用div模擬textarea文本框的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10