gpt4 book ai didi

javascript - 你如何处理 AngularJS 指令中的异步数据

转载 作者:可可西里 更新时间:2023-11-01 02:52:23 25 4
gpt4 key购买 nike

这是与 this one 类似的问题.我仍然在我的指令中看到一些异步数据的问题。基本上我有我想将数据传递到的指令,并且这些数据是异步获取的。我开始使用指令的 scope 属性来执行此操作,如下所示:

scope: {
myAsyncData: '='
}

在链接函数中,我添加了一个 $watch,这样我就可以根据范围内的值更新我的模型。像这样:

scope.$watch(scope.foo, function() {
//logic based on myAsyncData
}

当我这样做时,我开始收到 javascript 错误,因为异步数据尚未返回。这就是促使我发布上面链接的问题的原因。因此,我将 $watch 更改为如下内容:

scope.$watch(scope.foo, function() {
if (angular.isDefined(scope.myAsyncData))
{
//logic based on myAsyncData
}
}

当我这样做时,我没有收到 javascript 错误。但是,返回数据时 $watch 不会再次运行,因此我的 View 无法正确反射(reflect)模型。我尝试在 $timeout 中分配 $scope.foo 以在返回数据后触发 watch ,但这似乎太依赖于时间并且不是很稳健。

我的问题是在指令中与异步数据交互的正确方法是什么?我见过一些在指令中获取数据的示例,如下所示:

scope.$eval(attrs.myAsyncData);

这似乎没有任何改变。这与上面的 myAsyncData: '=' 有什么根本不同吗?

我开始怀疑我是否应该只通过服务获取数据,但似乎会出现完全相同的问题。我也有过直接在指令中获取数据的想法,但我不想让指令负责获取数据。我只希望指令负责显示数据并在用户与之交互时更新 View 。

我可能遗漏了一些关于如何完成此操作的明显信息,因此我将不胜感激。

最佳答案

我不太理解 Misko Hevery 的回答,所以我决定使用事件,它们对我来说效果很好。

在我的 Controller 中,我像这样加载数据:

$http({method: 'GET', url: 'js/datasets/ips-processed.json'}).
success(function(data, status, headers, config) {

//post load code here and...
$scope.$broadcast("Data_Ready");

在我的指令中,我把

return {
restrict: 'A',
scope: {
donutid: "=",
dataset: "="
},
link: function(scope, elements, attrs) {
scope.$on("Data_Ready", function (){
//here the functionality for this directive

希望对大家有帮助。

关于javascript - 你如何处理 AngularJS 指令中的异步数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12497590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com