AngularJS中控制器繼承


 

本篇關注AngularJS中的控制器繼承,了解屬性和方法是如何被繼承的。


嵌套控制器中屬性是如何被繼承的?

==屬性值是字符串

 

myApp.controller("ParentCtrl", function($scope){
    $scope.name = "darren";
})

myApp.controller("ChildCtrl", function($scope){

})

<div ng-controller="ParentCtrl">
    <label>父控制器中的name變量值</label> <input ng-model="name" />
    <div ng-controller="ChildCtrl">
         <label>子控制器中的name變量值</label> <input ng-model="name" />
         
         <ul>
            <li>child controller name: {{name}}</li>
            <li>parent controller name: {{$parent.name}}</li>
         </ul>
    </div>
</div>

 

以上,ParentCtrl中的name字段被ChildCtrl分享,但改變ChildCtrl中的name字段值卻不會影響ParentCtrl中的name值,當改變ChildCtrl中的name值,ParentCtrl和ChildCtrl的嵌套關系被打破,再次改變ParentCtrl中的name字段值也不會影響ChildCtrl中的name值。


以上,給ParentCtrl中的變量賦值是字符串類型,如果給ParentCtrl中的字段賦值對象類型呢?

==屬性值是對象

 

myApp.controller("ParentCtrl", function($scope){
    $scope.vm = {
        name: "John"
    };
})

myApp.controller("ChildCtrl", function($scope){

})

<div ng-controller="ParentCtrl">
    <label>父控制器中的vm.name變量值</label> <input ng-model="vm.name" />
    <div ng-controller="ChildCtrl">
         <label>子控制器中的vm.name變量值</label> <input ng-model="vm.name" />
         
         <ul>
            <li>child controller name: {{vm.name}}</li>
            <li>parent controller name: {{$parent.vm.name}}</li>
         </ul>
    </div>
</div>

 

以上,ParentCtrl中vm對象的被ChildCtrl分享,當然也分享了對象中的name字段,當改變ChildCtrl中的vm.name值會影響到ParentCtrl,也就是不會把ParentCtrl和ChildCtrl之間的嵌套關系打破

嵌套控制器中方法是如何被繼承的?

 

myApp.controller("ArrayCtrl", function($scope){
    $scope.myArray = ["John", "Andrew"];
    
    $scope.add = function(name){
        $scope.myArray.push(name);
    }
})

myApp.controller("CollectionCtrl", function($scope){

})

<div ng-controller="ArrayCtrl">
    <label>My Array:</label><span>{{myArray}}</span>
    
    <label>parent controller:</label>
    <input ng-model="parentName" />
    <button ng-click="add(parentName)">Add New Item</button>
    
    <div ng-controller="CollectionCtrl">
        <label>child controller:</label>
        <input ng-model="childName" />
        <input type="number" ng-model="index" />
        <button ng-click="add(childName)">Add New Item</button>
    </div>
</div>

 

使用ArrayCtrl中的add方法,添加沒問題;而且ArrayCtrl中的add方法也可以被CollctionCtrl使用;

而且在子控制器中可以重寫父控制器中的方法。

 

myApp.controller("CollectionCtrl", function($scope){
    //插入到某個位置
    $scope.add = function(name, index){
        $scope.myArray.splice(index,0, name);
    }
})

<div ng-controller="ArrayCtrl">
    <label>My Array:</label><span>{{myArray}}</span>
    
    <label>parent controller:</label>
    <input ng-model="parentName" />
    <button ng-click="add(parentName)">Add New Item</button>
    
    <div ng-controller="CollectionCtrl">
        <label>child controller:</label>
        <input ng-model="childName" />
        <input type="number" ng-model="index" />
        <button ng-click="add(childName, index)">Add New Item</button>
    </div>
</div>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM