Angular中的控制器

控制器在Angular中占有重要的地位,它是組成前端MVC框架的一員。在Angular中,控制器的作用是管理頁面的邏輯代碼。當(dāng)控制器通過"ng-controller"指令添加到DOM頁面時(shí),Angular將會(huì)通過控制器構(gòu)造函數(shù)生成一個(gè)實(shí)體的對象,而在生成這個(gè)對象的過程中,$scope對象作為參數(shù)注入其中,并允許用戶訪問$scope對象。這樣一來,用戶可以通過$scope對象與頁面中的元素進(jìn)行數(shù)據(jù)綁定,從而實(shí)現(xiàn)數(shù)據(jù)從控制器到視圖層的過程。

1.1控制器初始化$scope對象

例:頁面中,以應(yīng)用模塊的方式構(gòu)建一個(gè)控制器對象,并以內(nèi)聯(lián)聲明方式表明控制器對象依賴于$scope對象提供的服務(wù)。在控制器對象中,初始化$scope對象的名為"text"的屬性并與頁面的<span>元素進(jìn)行數(shù)據(jù)綁定

<!DOCTYPE html>
<html ng-app="a1">
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<h3>控制器初始化$scope對象</h3>
<div ng-controller="fn">
    <span>{{text}}</span>
</div>
</body>
<script src="js/angular.min.js"></script>
<script>
    var mod = angular.module('a1',[]);
    mod.controller('fn',['$scope', function ($scope) {
        $scope.text='hello world!!!'
    }])
</script>
</html>

1.2 添加$scope對象方法

除了可以通過初始化的方式為$scope對象添加屬性之外,還可以為$scope對象添加方法,并依靠這些定義的方法來滿足視圖層中邏輯處理和事件執(zhí)行的需求。在添加完$scope對象的方法函數(shù)之后,在視圖層中,就可以像綁定屬性一樣,通過表達(dá)式的方式綁定這些函數(shù),處理業(yè)務(wù)邏輯需求,也可以通過Angular的事件處理器,將執(zhí)行的事件(如ng-click)綁定給這些函數(shù),用來實(shí)現(xiàn)事件觸發(fā)時(shí)需要完成的功能需求。

例2:在例1的基礎(chǔ)上向$scope對象添加一個(gè)名為"span_show"的方法函數(shù)。在該函數(shù)中,先重置$scope對象的"text"屬性值,并通過return方法返回重置后的內(nèi)容值;在頁面中,通過Angular表達(dá)式綁定$scope對象中的"span_show"函數(shù),顯示重置后返回的內(nèi)容。

<div ng-controller="fn">
    <span class="show">{{span_show()}}</span>
</div>
<script src="js/angular.min.js"></script>
<script>
    var mod = angular.module('a1',[]);
    mod.controller('fn',['$scope', function ($scope) {
        $scope.text="hello zyt!!!";
        $scope.span_show= function () {
            $scope.text="hello angular!!!";
            return $scope.text;
        }
    }]);

1.2.1 在事件中綁定$scope對象的方法

例3:在例2的基礎(chǔ)上向$scope對象添加一個(gè)名為"click_show"的方法,同時(shí),在頁面中添加一個(gè)<button>元素,并在元素的click事件中綁定該方法。當(dāng)單擊按鈕時(shí),在頁面的<span>元素中顯示"hello"

<div ng-controller="fn">
    <span class="show">{{text}}</span>
    <button ng-click="click_show()" value="顯示">顯示</button>
</div>
<script src="js/angular.min.js"></script>
<script>
    var mod = angular.module('a2',[]);
    mod.controller('fn',['$scope', function ($scope) {
        $scope.text='hi';
        $scope.click_show= function () {
            $scope.text='hello';
        }
    }]);
</script>

1.2.2 添加帶參數(shù)的$scope方法

例4:在例3的基礎(chǔ)上再向控制器中添加一個(gè)名為"click_para"的帶參數(shù)方法,并再頁面中添加一個(gè)<button>元素,并將新添方法與元素的"ng-click"事件綁定,這樣當(dāng)單擊該元素時(shí),在<span>元素中顯示被綁定方法的參數(shù)內(nèi)容。

<div ng-controller="fn">
    <span class="show">{{text}}</span>
    <button ng-click="click_show()" value="顯示">顯示</button>
    <button ng-click="click_para('點(diǎn)擊了帶參數(shù)的按鈕!');">帶參數(shù)</button>
</div>
<script src="js/angular.min.js"></script>
<script>
    var mod = angular.module('a3',[]);
    mod.controller('fn',['$scope', function ($scope) {
        $scope.text='hi';
        $scope.click_show= function () {
            $scope.text='hello';
        }
        $scope.click_para= function (newVal) {
            $scope.text=newVal;
        }
    }]);
</script>

1.2.3 $scope對象屬性和方法的繼承

繼承,顧名思義,指的是一種層次級(jí)間的延續(xù)關(guān)系。由于頁面本身就是一個(gè)具有層次性的DOM結(jié)構(gòu)模型,而Angular中的"ng-controller"指令也允許在不同的層次元素中指定控制器。因此,處于子層控制器中的$scope對象將會(huì)自動(dòng)繼承父層控制器中$scope對象的屬性和方法

例5:在頁面中添加兩個(gè)具有包含關(guān)系的<div>元素,在父級(jí)<div>的控制器中添加屬性和方法,而將這些屬性和方法與子級(jí)<div>中的元素相綁定,在子級(jí)<div>的<span>元素中顯示屬性內(nèi)容,在單擊<button>按鈕時(shí)調(diào)用父級(jí)控制器中添加的方法。

<div ng-controller="fn">
    <div ng-controller="fn_1">
        <span>{{text}}</span><br/>
        <span>{{child_text}}</span>
        <button ng-click="click_show()">繼承</button>
    </div>
</div>
<script src="js/angular.min.js"></script>
<script>
    var mod = angular.module('a4',[]);
    mod.controller('fn',['$scope', function ($scope) {
        $scope.text='hi';
        $scope.click_show= function () {
            $scope.text='hello';
        }
    }]);
    mod.controller('fn_1',['$scope', function ($scope) {
        $scope.child_text='angular';
    }]);
//    最內(nèi)層的可以繼承包含它的所有外層中$scope對象的屬性和方法,而最內(nèi)層控制器中添加的新屬性和方法,最外層不能訪問。
//    繼承是一種由內(nèi)而外的順序關(guān)系
//    外層的想要訪問內(nèi)層的應(yīng)該怎么做???
</script>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容