我正在尝试使用来自ajax调用的数据创建一个指令,我的问题是创建指令时数据是未定义的,因为ajax仍在加载,我知道使用setTimeout验证这一点并使用$ scope.apply ()它可能是有效的,但它似乎不是一个好方法,也尝试添加$ watch来标记ajaxLoading,但它不起作用。
pmApp.directive("filter", function () {
return {
restrict: "A",
scope: {
data: '=',
ngModel: '=',
display: '='
},
templateUrl: "views/template.html",
link: function (scope, element, attrs) {
var value = attrs.value,
scopeParent = scope.$parent,
model = attrs.ngModel;
scope.description = attrs.description;
scope.value = value;
window.setTimeout(function() {
scope.ngModel = scope.data[0][value];
scope.$apply();
}, 2000);
}
}
});
答案 0 :(得分:0)
无论你使用哪种方法进行ajax调用,都应该返回一个promise。将此承诺保存在控制器上并将其传递给指令范围配置,以便指令可以访问它。
现在,您可以使用承诺来延迟变量分配,而不是setTimeout
。
但作为一般建议,您应该使用内置$timeout
Service而不是setTimeout
,因此您不必担心摘要周期。有关详细信息,请访问https://coderwall.com/p/udpmtq。