我一直在旋转这几天没有运气。除此之外,我有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