Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从扩展控制器调用父方法_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript 从扩展控制器调用父方法

Javascript 从扩展控制器调用父方法,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,这几天我一直在胡思乱想,运气不好。我有BaseController和init方法。然后,我希望扩展这个控制器,并从childs'init'方法中调用parents'init'方法 一般的答案是调用$scope.$parent.init($settings\u object)。但是,这将返回错误:$scope.$parent.init不是函数 一般来说,扩展控制器工作正常,能够访问perents功能和设置而不会出现问题。仅此示例从子对象调用相同的父方法失败 基站控制器 (函数(){ var ma

这几天我一直在胡思乱想,运气不好。我有
BaseController
init
方法。然后,我希望扩展这个控制器,并从childs'init'方法中调用parents'init'方法

一般的答案是调用
$scope.$parent.init($settings\u object)
。但是,这将返回
错误:$scope.$parent.init不是函数

一般来说,扩展控制器工作正常,能够访问perents功能和设置而不会出现问题。仅此示例从子对象调用相同的父方法失败

基站控制器

(函数(){
var mainApp=angular.module(“MyAppModule”);
controller('BaseController',function($scope,$rootScope,GLOBAL_CONFIG,ajaxRESTful,sharedvalue,messageDisplay){//base controller
var bvm=this;//基本vm
this.init=函数($settings\u object){
var keys=Object.keys($settings\u Object);
对于(i=0;i控制器对象(
this
)而
$scope
对象没有直接关系。它们之间没有自动连接。
$scope。$parent
不返回控制器,而是返回父作用域。由于您在
this.init
中注册了父方法,而不是通常的
$scope.init
,因此无法使用作用域找到它

您可以通过多种方式规避此问题,但正如其他人所建议的,如果您有许多控制器共享的功能,请尝试将其放在服务中。也许您的
BaseContoller本身应该是一个服务。

控制器对象(
this
)而
$scope
对象没有直接关系。它们之间没有自动连接。
$scope。$parent
不返回控制器,而是返回父作用域。由于您在
this.init
中注册了父方法,而不是通常的
$scope.init
,因此无法使用作用域找到它

您可以通过多种方式规避此问题,但正如其他人所建议的那样,如果您拥有多个控制器共享的功能,请尝试将其放在服务中。也许您的
BaseContoller本身应该是一项服务。

您应该:

var parentInit = this.init.bind(this);
this.init = function ($object) {
  parentInit($object);
  if(vm.role_id != null){
    vm.loadInRole( );
  }
}
你应该做:

var parentInit = this.init.bind(this);
this.init = function ($object) {
  parentInit($object);
  if(vm.role_id != null){
    vm.loadInRole( );
  }
}

init不在范围内。将它更改为范围。它将工作。$Simul.init=……也许可以考虑在控制器之间进行对话。最佳实践。您也可以通过$ROOTHORT来进行讨论。这不是最好的方式。忘记$父节点甚至以角形式存在。您非常需要使用它,因为通常有更好的方式。使用服务连接C。ontrollers TONGETHER was是初始化这些控制器的最佳方式?该方法通过以下方式调用:
ng init=“create.init”({msg_panel_id:'cre_role',role:'display',role_id:'47'))ng controller=“RoleEdit as details”这个init在孩子和家长中都是有趣的。init不在范围内。将它工作。$Simul.init=…也许考虑一个在控制器之间对话的服务。最佳实践。你也可以用$ROOTHORKORT来讨论,这不是最好的方法。忘记$家长甚至以角度存在。这是非常罕见的,你需要使用。这通常是一种更好的方法。使用服务将控制器连接在一起然后是初始化这些控制器的最佳方法吗?该方法通过调用
ng init=“create.init”({msg\u panel\u id:'cre\u role',role:'display',role\u id:'47'))ng controller=“RoleEdit as details”
此初始化需要在孩子和家长中都很有趣。