Angular 指令将范围隔离到 parent 绑定未定义
Angular directive isolate scope to parent binding undefined
我正在使用(令人敬畏的)Restangular,我 运行 进入了迫使我使用 scope.$parent
(不是很棒)的东西,我不想使用它。似乎即使我的控制器是我的指令范围的 parent 范围,=
独立范围绑定在我的 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
函数所示,评估范围 属性 本应绑定到我的 parent 范围 属性 returns 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 调用移动到包含控制器的视图的解析函数。然后您可以直接访问已解析的数据作为控制器中的注入
另一种方法可能是直接将承诺分配给范围,然后在链接函数中等待解决。
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
我正在使用(令人敬畏的)Restangular,我 运行 进入了迫使我使用 scope.$parent
(不是很棒)的东西,我不想使用它。似乎即使我的控制器是我的指令范围的 parent 范围,=
独立范围绑定在我的 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
函数所示,评估范围 属性 本应绑定到我的 parent 范围 属性 returns 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 调用移动到包含控制器的视图的解析函数。然后您可以直接访问已解析的数据作为控制器中的注入
另一种方法可能是直接将承诺分配给范围,然后在链接函数中等待解决。
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