等到 require 在 angular 控制器中准备就绪
Wait until require is ready within an angular controller
我需要从我的主指令中的另一个指令的控制器请求 属性,这很简单:
return {
...
require['myOtherController'],
link: function(scope,element,attrs,controller){
scope.propFromOtherCtrl = controller[0].propFromOtherCtrl;
}
但是:我的指令的控制器首先被加载。
所以一开始,propFromOtherCtrl
在控制器中是未定义的,直到 link 函数被执行。
现在,我正在 $scope.$watch
在我的控制器中设置 属性 直到它被定义,然后手动启动我的控制器的初始化。
//directive controller
$scope.$watch(function(){return $scope.propFromOtherCtrl; },function(n,o){
if(n !== o){
// init
}
});
但这似乎很老套。有没有更优雅的方式来做到这一点?
由于我的应用程序的架构,我无法直接共享两个指令之间的范围。
如果体系结构是您不能在两个控制器之间共享范围的唯一原因,您始终可以使用 $controller 从一个控制器继承另一个控制器,那么无论在 html dom:
$controller('myOtherController', { $scope: $scope });
另一种方法是将触发指令的 html 部分插入到 ng-if 中,直到另一个控制器准备就绪才初始化:
ng-if="propFromOtherCtrlLoaded"
最后,如果这些都不适合你,使用 $watch 也不错,除了一个小的补充,停下来听听变化,会更有效率:
var unreg = $scope.$watch(function(){return $scope.propFromOtherCtrl; },function(n,o){
if(n !== o){
// init
unreg();
}
});
我需要从我的主指令中的另一个指令的控制器请求 属性,这很简单:
return {
...
require['myOtherController'],
link: function(scope,element,attrs,controller){
scope.propFromOtherCtrl = controller[0].propFromOtherCtrl;
}
但是:我的指令的控制器首先被加载。
所以一开始,propFromOtherCtrl
在控制器中是未定义的,直到 link 函数被执行。
现在,我正在 $scope.$watch
在我的控制器中设置 属性 直到它被定义,然后手动启动我的控制器的初始化。
//directive controller
$scope.$watch(function(){return $scope.propFromOtherCtrl; },function(n,o){
if(n !== o){
// init
}
});
但这似乎很老套。有没有更优雅的方式来做到这一点? 由于我的应用程序的架构,我无法直接共享两个指令之间的范围。
如果体系结构是您不能在两个控制器之间共享范围的唯一原因,您始终可以使用 $controller 从一个控制器继承另一个控制器,那么无论在 html dom:
$controller('myOtherController', { $scope: $scope });
另一种方法是将触发指令的 html 部分插入到 ng-if 中,直到另一个控制器准备就绪才初始化:
ng-if="propFromOtherCtrlLoaded"
最后,如果这些都不适合你,使用 $watch 也不错,除了一个小的补充,停下来听听变化,会更有效率:
var unreg = $scope.$watch(function(){return $scope.propFromOtherCtrl; },function(n,o){
if(n !== o){
// init
unreg();
}
});