前沿
最近在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之間的嵌套關系打破。
新聞熱點
疑難解答
圖片精選