我仍然是Angular的新人,但我正在取得一些进展..我认为:) 我有问题使用隔离范围将json文件从控制器传递到指令。
这是我的控制器,它与工厂" dataArchive":
交谈.controller('graphCtrl', ['$scope', 'dataArchive', function($scope, dataArchive){
dataArchive.get().then(function(data){
$scope.getData = data;
});
}]);
然后我有使用隔离范围的指令。
.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);
};
};
});
这是我的HTML:
<div ng-controller="graphCtrl">
<data-graph get-archive-data="getData"></data-graph>
</div>
在控制台中,我总是得到“未定义的”#。
我错了,这是一个好方法吗?
谢谢大家。
答案 0 :(得分:1)
由于此代码是异步的:
dataArchive.get().then(function(data){
$scope.getData = data;
});
link
函数将在getData
上设置数据之前运行,因此此时不会设置隔离的范围变量。所以,我相信你看到了时间问题。
确保指令绑定正确无误。尝试将$scope.getData
设置为静态值(例如$scope.getData = [{ data: 'value'}]
)。这应该有用。
此外,Angular根据对象引用检查更改(重新绑定)。因此,您可能需要在控制器中定义$scope.getData
(在异步调用之外)。然后你可能想要push
所有数据(而不是用赋值替换整个对象)。
希望这有帮助。