AngularJS :如何从相同的指令控制器访问指令范围
AngularJS : How do you access a directives scope from the same directives controller?
HTML
<authorname skim="skim"></authorname>
命令
.directive('authorname', function() {
return {
restrict: 'E',
scope: {
skim: '=skim'
},
controller: function($scope, User) {
// console.log('skim.author: ', skim.author); doesn't work
// console.log('$scope.skim.author: ', $scope.skim.author); doesn't work
// console.log('$scope.skim: ', $scope.skim); undefined
User.get({ _id: skim.author }, function(user) {
$scope.author = user.name;
});
},
template: '<small>Skim by {{author}}</small>' // but can access {{skim.author}} here
};
});
我可以在模板中访问skim.author
,但不能在控制器中访问(这是我需要它的地方)。如何在控制器中访问它?
我相信
您正在从父控制器异步设置skim对象,可能来自另一个ajax调用。但是您的指令已经实例化了(控制器首先运行/实例化,然后是链接函数)。因此,当您尝试访问$scope.skim
时,它还不存在。模板中的绑定之所以有效,是因为它们在摘要周期中按角度更新,这是在从父控制器向skim
分配值之后发生的。因此,您可以做的一种方法是创建一个临时观察程序,直到填充skim
双向绑定值。
.directive('authorname', function() {
return {
restrict: 'E',
scope: {
skim: '=skim'
},
controller: function($scope, User) {
/*Create a temporary watch till you get skim or
watch skim.author according to how you are assigning*/
var unWatch = $scope.$watch('skim', function(val){
if(angular.isDefined(val)) { //Once you get skim
unWatch(); //De-register the watcher
init(); //Initialize
}
});
function init(){
User.get({ _id: skim.author }, function(user) {
$scope.author = user.name;
});
}
},
template: '<small>Skim by {{author}}</small>' // but can access {{skim.author}} here
};
});
相关文章:
- AngularJS:从控制器访问特定的指令范围
- angularjs:指令的访问控制器
- 从AngularJS中的指令模板访问内联控制器变量
- 无法从具有隔离作用域的指令中访问控制器中定义的对象
- 如何从父指令/控制器访问指令范围
- 角度指令 - 需要从指令控制器访问所需的控制器
- Angular js 指令控制器访问范围属性,但返回未定义
- AngularJS :如何从相同的指令控制器访问指令范围
- 我在从我的指令 Angular 访问控制器的范围时遇到问题
- 从 angular.js 指令中的控制器访问范围变量
- Angularjs:如何从模态控制器和指令控制器访问主控制器
- 从单独的控制器访问指令作用域
- Angular指令从控制器访问模板元素
- 从parent的父控制器访问指令变量
- 在Angular指令中访问父控制器
- Angularjs:如何在指令中访问控制器范围
- Angular 指令无法访问 DOM 树中的控制器
- 如何在指令中访问控制器(从外部文件)'
- 从控制器访问尚未编译的指令DOM元素
- 访问AngularJs指令控制器