詳解AngularJS控制器的使用_AngularJS

來源:互聯網
上載者:User

控制器在Angularjs中的作用是增強視圖,它實際就是一個函數,用來向視圖中的範圍添加額外的功能,我們用它來給範圍對象設定初始狀態,並添加自訂行為。

當我們在頁面上建立一個控制器時,Angularjs會產生並傳遞一個$scope給這個控制器,由於Angularjs會自動執行個體化控制器,所以我們只需要寫建構函式即可。下面的例子展示了控制器初始化:

function my Controller($scope){ $scope.msg="hello,world!"; }

上面這個建立控制器的方法會汙染全域命名空間,更合理的辦法是建立一個模組,然後在模組中建立控制器,如下:

var myApp=angular.module("myApp",[]);myApp.controller("myController",function($scope){ $scope.msg="hello,world!";})

用內建指令ng-click可以將按鈕、連結等其他任何DOM元素同點擊事件進行綁定。ng-click指令將瀏覽器中的mouseup事件,同設定在DOM元素上的事件處理常式綁定在一起(例如,當瀏覽器在某個DOM元素上觸發了點擊事件,函數就會被調用)。和前面的例子類似,綁定看起來是這樣的:

<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>

按鈕和連結都被綁定在了內部$scope的一個操作上,當點擊任何一個元素時AngularJS都會調用相應的方法。注意,當設定調用哪個函數時,會同時用括弧傳遞一個參數(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與其他架構的最大區別在於,控制器並不適合來執行DOM操作、格式化或資料操作,以及除儲存資料模型之外的狀態維護操作,它只是視圖和$scope之間的橋樑。

控制器嵌套(範圍包含範圍)

AngularJS應用的任何一個部分,無論它渲染在哪個上下文中,都有父級範圍存在。對於ng-app所處的層級來講,它的父級範圍就是$rootScope。

預設情況下,AngularJS在當前範圍中無法找到某個屬性時,便會在父級範圍中進行尋找。如果AngularJS找不到對應的屬性,會順著父級範圍一直向上尋找,直到抵達$rootScope為止。如果在$rootScope中也找不到,程式會繼續運行,但視圖無法更新。

通過例子來看一下這個行為。建立一個ParentController,其中包含一個user對象,再建立一個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內部,那ChildController的$scope對象的父級範圍就是ParentController的$scope對象。根據原型繼承的機制,我們可以在子範圍中訪問ParentController的$scope對象。

<div ng-controller="ParentController"><div ng-controller="ChildController"><a ng-click="sayHello()">Say hello</a></div>{{ person }}</div>

以上就是本文的全部內容,希望對大家的學習有所協助,協助大家熟悉AngularJS控制器。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.