Javascript 角度指令隔离范围到父绑定未定义

Javascript 角度指令隔离范围到父绑定未定义,javascript,angularjs,angularjs-directive,restangular,Javascript,Angularjs,Angularjs Directive,Restangular,我正在使用(非常棒的)restanglar,我遇到了迫使我使用scope.$parent(不太棒)的东西,我不想使用它。似乎即使我的控制器是我指令作用域的父作用域,在执行我的父控制器之前,=隔离作用域绑定也会被评估 使用以下HTML: <div ng-controller="myController"> <div x-my-directive x-some-value="parentValue"></div> </div> 以及以下控制器

我正在使用(非常棒的)restanglar,我遇到了迫使我使用
scope.$parent
(不太棒)的东西,我不想使用它。似乎即使我的控制器是我指令作用域的父作用域,在执行我的父控制器之前,
=
隔离作用域绑定也会被评估

使用以下HTML:

<div ng-controller="myController">
    <div x-my-directive x-some-value="parentValue"></div>
</div>
以及以下控制器:

myApp.controller("myController", function($scope, allMyValues) {
    allMyValues.getList().then(function(parentValue){
        $scope.parentValue = parentValue;
    });
}
如我的指令
link
函数所示,对本应绑定到父级范围属性的范围属性求值将返回
undefined
。但是,当我将指令
链接
功能更改为以下内容时:

    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函数。然后,您可以通过控制器中的注入直接访问解析的数据

另一种方法可能是直接将承诺分配给作用域,然后在链接函数中等待解析

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在您的请求得到解决之前不存在,所以请在代码中添加如下行
示例演示

对我来说似乎很好。请看这里如何在$scope.parentValue中设置值?@sylvester抱歉,我刚刚修改了这个问题:我在控制器中使用了restanglar(我知道一开始没有添加它是愚蠢的),这解决了我的问题,只剩下一个
$scope.$apply()
。谢谢即使它现在起作用了,您的解决方案似乎更专业。我会调查的,谢谢!
myApp.controller("myController", function($scope, allMyValues) {
//add this line
$scope.parentValue={};

    allMyValues.getList().then(function(parentValue){
        $scope.parentValue = parentValue;
    });
}