我的代码位于不同的层中: 1.包含我所有$ http请求的工厂,并返回承诺。 2.一个控制器,使用then处理该promise,将其分配给$ scope变量,然后将其显示在gridview上。
现在我正在尝试创建一个指令来处理Gridview,只是将数据作为attr传递给要在链接函数中处理并显示它。有了这个,我试图实现代码重用性。问题是由于当然是异步调用,范围上的数据变量是空的,对此更好的方法是什么?
angular.module('parametrosModule').factory('apiMethods', ['$http', 'apiUrl', function ($http, apiUrl) {
return {
getBleh: function () {
return $http.get(apiUrl.urlBase + '/getBleh');
},
}
}])
.controller('transactionController', ['apiMethods', function (apiMethods) {
var vm = this;
function getData() {
apiMethods.getBleh()
.then(function (response) {
vm.data = response.data;
});
};
}])
.directive('dynamicGrid', [function () {
return {
restrict: 'E',
templateUrl: 'app/directives/dynamicGrid.html',
scope: {
data: '=',
headers: '='
},
link: function (scope, elem, attrs) {
var vm = this;
vm.values = scope.data;
vm.headers = scope.headers;
}
}
}]);
在格式化之后,这有点像我的代码,事实是由于api调用的迟到,数据attr变空了。整个想法是在从应用程序中的任何人接收x数据后创建自己构建的东西。谢谢!
答案 0 :(得分:1)
您不需要link function
。 here是一个有效的例子。您只需要将模型绑定到指令的$scope
,然后告诉它要绑定到的内容:
scope: {
data: '=data',
headers: '='
}
答案 1 :(得分:0)
你可以解决你的api调用,所以它实际上是在你的视图渲染之前加载的,或者你可以用ng-if =“isDataLoaded”包装你的指令然后在你的设置中将它设置为true