<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答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
        主站蜘蛛池模板: 亚洲国产美女精品久久| 亚洲精品午夜国产VA久久成人| 亚洲高清无在码在线无弹窗| 国产一级淫片a免费播放口| 亚洲欧洲精品无码AV| 国产免费内射又粗又爽密桃视频 | 182tv免费观看在线视频| 亚洲AV永久无码精品成人| 午夜网站在线观看免费完整高清观看| 久久久久久a亚洲欧洲aⅴ| 日日麻批免费40分钟无码 | 亚洲AV成人影视在线观看| 国产精品无码素人福利免费| 牛牛在线精品免费视频观看| 亚洲天堂中文字幕在线| 久久国产乱子伦精品免费不卡| 亚洲视频在线观看网站| 四虎成人精品一区二区免费网站| 婷婷亚洲综合五月天小说在线| 亚洲毛片不卡av在线播放一区| 免费在线看黄网站| 亚洲av专区无码观看精品天堂| 午夜无遮挡羞羞漫画免费| 一级午夜a毛片免费视频| 久久精品国产亚洲香蕉| 最近最好的中文字幕2019免费 | 在线免费观看韩国a视频| 一个人看的免费视频www在线高清动漫 | 亚洲熟女www一区二区三区| 精品国产亚洲男女在线线电影 | 亚洲欧洲日产国码www| 国产成人免费A在线视频| a视频在线观看免费| 亚洲youjizz| 日韩一卡2卡3卡4卡新区亚洲 | 日本高清色本免费现在观看| ssswww日本免费网站片| 亚洲日本视频在线观看| 国产一区二区三区无码免费| 久久99精品视免费看| 亚洲国产精品网站在线播放|