我一直在旋轉這幾天沒有運氣。除此之外,我有BaseController
和init
方法。然後,我希望擴展這個控制器,並且從孩子的init方法中調用父母的init方法。從擴展控制器角度調用父方法
一般的答案是致電$scope.$parent.init($settings_object)
。但是,這是返回Error: $scope.$parent.init is not a function
。
通常擴展控制器工作正常,能夠訪問perents功能和設置沒有問題。只是這個例子調用孩子的同一父方法失敗。
BaseController
(function(){
\t var mainApp = angular.module("MyAppModule");
\t mainApp.controller('BaseController',function($scope, $rootScope,GLOBAL_CONFIG, ajaxRESTful,sharedValues, messageDisplay) { //base contorller
\t var bvm = this; //base vm
\t this.init = function($settings_object){
\t \t var keys = Object.keys($settings_object);
\t \t for(i=0;i<keys.length;i++){
\t \t \t bvm[keys[i]] = $settings_object[keys[i]];
\t \t \t
\t \t }
\t }
\t
//code remved to keep simple
\t
\t });
})();
擴展控制器
(function(){
var app = angular.module('MyAppModule');
\t app.controller('RoleEdit', function($scope, $rootScope,$controller) {
\t \t angular.merge(this, $controller('BaseController', {$scope: $scope}));
\t \t var vm = this;
\t \t vm.newRoleFormData = [];
\t \t vm.role_id = null;
\t \t vm.mode = 'create';
\t \t vm.role = null;
\t \t \t \t \t \t
\t \t vm.init = function ($object) {
\t \t \t console.log(vm);
\t \t \t console.log($scope.$parent);
\t \t \t $scope.$parent.init($object);
\t if(vm.role_id != null){
\t vm.loadInRole();
\t }
\t };
\t \t
\t \t
\t }) //end contoller
})();//end of app
爲什麼不這項工作? 有沒有更好的方法來做到這一點?
初始化不在範圍之內。將其更改爲範圍。它會工作。 $ scope.init = .. – manivannan
考慮可能是一個控制器之間通話的服務。最佳實踐。你也可以通過$ rootScope進行交談,這不是最好的方式。 –
忘記$ parent甚至存在於角度中。這是非常非常罕見的,你需要使用它,因爲通常有更好的方法。使用服務將控制器連接在一起 – charlietfl