AngularJS将json传递给指令

AngularJS将json传递给指令,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我在这方面还是新手,但我正在取得一些进展。。我想:) 我在使用隔离作用域将json文件从控制器传递到指令时遇到问题 .directive('dataGraph', function($compile){ return { restrict: 'AE', replace: true, scope: { getArchiveData: '=' }, template: '<div i

我在这方面还是新手,但我正在取得一些进展。。我想:) 我在使用隔离作用域将json文件从控制器传递到指令时遇到问题

.directive('dataGraph', function($compile){
    return {
        restrict: 'AE',
        replace: true,
        scope: {
            getArchiveData: '='
        },
        template: '<div id="chartdiv"></div>',
        link: function (scope, element, attrs){
             var dati = scope.getArchiveData;
             console.log(dati);
        };
     };
 });
这是我的控制器,它与工厂“数据存档”通信:

然后我有一个指令,它使用隔离作用域

.directive('dataGraph', function($compile){
    return {
        restrict: 'AE',
        replace: true,
        scope: {
            getArchiveData: '='
        },
        template: '<div id="chartdiv"></div>',
        link: function (scope, element, attrs){
             var dati = scope.getArchiveData;
             console.log(dati);
        };
     };
 });
指令('dataGraph',函数($compile){ 返回{ 限制:“AE”, 替换:正确, 范围:{ getArchiveData:“=” }, 模板:“”, 链接:函数(范围、元素、属性){ var dati=scope.getArchiveData; 控制台日志(dati); }; }; }); 这是我的HTML:

<div ng-controller="graphCtrl">
    <data-graph get-archive-data="getData"></data-graph>
</div>

在控制台中,我总是得到“未定义”

我错在哪里?这是个好办法吗


谢谢大家。

因为此代码是异步的:

dataArchive.get().then(function(data){
        $scope.getData = data;
    });
getData
上设置数据之前,
link
函数将运行,因此此时不会设置隔离范围变量。所以,我相信你看到了一个时间问题

以确保您的指令绑定是正确的。尝试将
$scope.getData
设置为静态值(例如
$scope.getData=[{data:'value'}]
)。这应该行得通

此外,角度检查是否基于对象参照进行更改(重新绑定)。因此,您可能需要在控制器中定义
$scope.getData
(异步调用之外)。然后,您可能希望
将所有数据推入
(而不是用赋值替换整个对象)


希望这有帮助。

示例代码正确吗?在作用域定义中有getArchiveData,但在链接函数中调用了scope.getWeatherData()。我在做一些测试,不,不,是scope.getArchiveData。无论如何,这是不正确的,我得到的是未定义的而不是json。是的,这是有道理的。非常感谢。