[英]Angular two-way data binding isolate scope directive but property is undefined?
[英]Angular directive isolate scope to parent binding undefined
我正在使用(真棒)Restangular,并且遇到了一些迫使我使用scope.$parent
(不很棒)的东西,但我不想使用它。 似乎即使我的控制器是我指令范围的父作用域,也要在执行我的父控制器之前对=
隔离范围绑定进行评估。
使用以下HTML:
<div ng-controller="myController">
<div x-my-directive x-some-value="parentValue"></div>
</div>
和以下指令:
myApp.directive("myDirective", function () {
return {
restrict: 'A',
link: function (scope, elem) {
console.log(scope.someValue); // Logs 'undefined' :(
},
scope: {
someValue: "="
}
}
});
和以下控制器:
myApp.controller("myController", function($scope, allMyValues) {
allMyValues.getList().then(function(parentValue){
$scope.parentValue = parentValue;
});
}
如我的指令link
功能所示,评估应该绑定到我父母的scope属性的scope属性将返回undefined
。 但是,当我将指令link
功能更改为以下内容时:
myApp.directive("myDirective", function () {
return {
restrict: 'A',
link: function (scope, elem) {
setTimeout(function() {
console.log(scope.someValue); // Logs '{1: number_1, 2: number_2}'
}, 2000);
},
scope: {
someValue: "="
}
}
});
我该如何解决这个问题?
谢谢
在将值分配给作用域之前,您似乎正在等待承诺的解决。
您可以通过几种方法来处理此问题。
一种方法是尝试将Restangular调用移至包含控制器的视图的resolve函数。 然后,您可以直接注入控制器中来访问已解析的数据
另一种方法可能是将promise直接分配给作用域,然后在链接函数中等待解析。
scope.someValue.then(function(value) { console.log(value); });
这应该会有所帮助:
myApp.controller("myController", function($scope, allMyValues) {
//add this line
$scope.parentValue={};
allMyValues.getList().then(function(parentValue){
$scope.parentValue = parentValue;
});
}
在解决您的请求之前,$ scope.parentValue不存在,因此在代码示例演示http://jsbin.com/komikitado/1/edit中添加以下内容
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.