繁体   English   中英

Angular指令将范围隔离到父绑定未定义

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM