• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    AngularJS中controller控制器繼承的使用方法

    來源:懂視網 責編:小采 時間:2020-11-27 22:26:26
    文檔

    AngularJS中controller控制器繼承的使用方法

    AngularJS中controller控制器繼承的使用方法:前沿 最近在angularjs項目當中,看到 controller 好多都是重復性的代碼,在 controller 當中有好多代碼很相似 function(比如 controller 下的 CRUD 方法),重復性工作太多。后來想,可不可以提出一個service ,但仔細想想,這些CRUD 本來就是
    推薦度:
    導讀AngularJS中controller控制器繼承的使用方法:前沿 最近在angularjs項目當中,看到 controller 好多都是重復性的代碼,在 controller 當中有好多代碼很相似 function(比如 controller 下的 CRUD 方法),重復性工作太多。后來想,可不可以提出一個service ,但仔細想想,這些CRUD 本來就是

    前沿

    最近在angularjs項目當中,看到 controller 好多都是重復性的代碼,在 controller 當中有好多代碼很相似 function(比如 controller 下的 CRUD 方法),重復性工作太多。后來想,可不可以提出一個service ,但仔細想想,這些CRUD 本來就是從 Service 中調用的,如果在提出Service,會造成 Service 比較混亂,職責不清晰 。 因為自己做過一些后端,借助后端的思想,是不是可以 controller 繼承。

     controllerservice實現繼承經過一番查閱資料,發現AngularJS已經幫我們提供了controller繼承。我們只需借助 controllerservice 。$controller service api

    // 參數的解釋
    // constructor 可以是 function 也可以是 string 
    // 如果傳入一個 function, 就會當成 controller 的構造函數
    // 如果傳入一個 string,就會根據字符串去$controllerProvider 找 注冊的 controller
    //locals 是一個對象,注入來自局部的 controller ,在這里我們認為 child controller
    $controller(constructor, locals, [bindings])
    

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

    ==屬性值是字符串

    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>
    
    
    

    代碼案例

    1.創建一個 base.controller.js 文件

    (function() {
     'use strict';
    
     angular
     .module('DemoApp')
     .controller('BaseCtrl', BaseCtrl);
    
     //手動注入一些服務
     BaseCtrl.$inject = ['$scope','CRUDServices'];
    
     /* @ngInject */
     function BaseCtrl($scope,CRUDServices) {
     var _this = this;
     //當前 controller 提供一些方法
     _this.bFormValid = formValid;
    
     activate();
    
     ////////////////
    
     //初始化時候調用
     function activate() {
    
     getList();
     }
    
     // 獲取數據列表
     function getList() {
     //把當前的結果賦值給 bList 屬性上
     _this.bList = CRUDServices.getList();
     }
    
     // 表單驗證
     function formValid(){
    
     //do some thing
     return false;
     }
     }
    })();
    
    

    代碼很簡單,我們在 BaseController中提供了一個簡單的 formValid() 方法,還初始化調用了一個getList() 方法。

    2.創建一個Service 。這個 service 來提供數據服務

    (function() {
     'use strict';
    
     angular
     .module('DemoApp')
     .service('ExtendServices', ExtendServices);
    
     ExtendServices.$inject = [];
    
     /* @ngInject */
     function ExtendServices() {
    
     return {
     getList: getList //獲取 list 列表
     }
    
     ////////////////
    
     function getList() {
     return [{ id: 1, name: '張三' }, { id: 2, name: '李四' }]
     }
     }
    })();
    
    

    3.創建child.controller.js 文件 也就是我們最主要的一個文件

    (function() {
     'use strict';
    
     angular
     .module('DemoApp')
     .controller('ChildCtrl', ChildCtrl);
    
     //手動注入一些服務
     //ExtendServices 用來提供數據的 Servie
     ChildCtrl.$inject = ['$scope', '$controller','ExtendServices'];
    
     /* @ngInject */
     function ChildCtrl($scope, $controller,ExtendServices) {
    
     var vm = this;
    
     //調用我們父 controller 
     var parentCtrl = $controller('BaseCtrl', { $scope, $scope,CRUDServices:ExtendServices })
    
     //通過 angular.extend 把父控制器上的 方法和屬性 綁定到 子的對象上
     angular.extend(vm, parentCtrl);
    
    
     activate();
    
     ////////////////
    
     function activate() {
     
     //調用表單驗證方法
     vm.bFormValid(); 
     
     }
     }
    })();
    
    

    這樣,我們通過 $controller service 實現了 controller 的繼承 ,也可以把 child controller 需要的注入的服務 傳入到 base controller 當中 。({ $scope, $scope,CRUDServices:ExtendServices }),我們child controlller 一行代碼都沒有寫,就已經用了 獲取 列表的 magic power 。如果我們需要調用表單驗證,直接調用 vm.bFormValid() 就可以。

    4.創建child.html 文件 ,我們直接 綁定就ok

    <div>
     <!-- 直接綁定 vm.bList 就會看到
    輸出結果--> <div ng-repeat="item in vm.bList">{{item}}</div> </div>

    結束語

    這樣下來以后我們可以提出一個 公共的 controller ,封裝一些常用的方法,在 controller當中,只需要去寫關于業務不同的 方法。 代碼可維護性大大提高,代碼量也會減下來。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    AngularJS中controller控制器繼承的使用方法

    AngularJS中controller控制器繼承的使用方法:前沿 最近在angularjs項目當中,看到 controller 好多都是重復性的代碼,在 controller 當中有好多代碼很相似 function(比如 controller 下的 CRUD 方法),重復性工作太多。后來想,可不可以提出一個service ,但仔細想想,這些CRUD 本來就是
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产成人亚洲合集青青草原精品| 精品久久久久久久久午夜福利| 久久亚洲精品成人AV| www.日韩精品| 奇米影视7777久久精品| 久久久精品视频免费观看| www.久久精品| 亚洲精品一品区二品区三品区| 国产精品99爱免费视频| 国产偷亚洲偷欧美偷精品| 精品无码国产污污污免费网站| 亚洲国产精品自在拍在线播放| 国产精品哟女在线观看| 青青草精品视频| 国产精品视频网站| 国产AV无码专区亚洲精品 | 欧美精品亚洲精品日韩专区| 久久夜色精品国产亚洲| 国产99久久精品一区二区| 精品熟女少妇a∨免费久久| 色婷婷久久久SWAG精品| 精品第一国产综合精品蜜芽| 国产高清在线精品一本大道国产| 极品精品国产超清自在线观看| 精品久久久久香蕉网| 99久久精品毛片免费播放| 精品无码三级在线观看视频| 四虎国产精品永久地址99| 国产在视频线精品视频二代| 99精品国产高清一区二区麻豆| 久久99国产乱子伦精品免费| 亚洲国产精品VA在线看黑人 | 99热精品久久只有精品| 56prom精品视频在放免费| 久久精品国产精品国产精品污| 国产精品久久一区二区三区| 精品国产自在在线在线观看 | 自拍偷在线精品自拍偷无码专区| 免费短视频软件精品一区二区| 久久综合精品国产一区二区三区| 久久精品亚洲乱码伦伦中文|