使用Angularjs的动态网格

时间:2016-03-09 22:24:15

标签: javascript angularjs gridview angularjs-directive angularjs-scope

我的代码位于不同的层中:  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数据后创建自己构建的东西。谢谢!

2 个答案:

答案 0 :(得分:1)

您不需要link functionhere是一个有效的例子。您只需要将模型绑定到指令的$scope,然后告诉它要绑定到的内容:

scope: {
  data: '=data',
  headers: '='
}

答案 1 :(得分:0)

你可以解决你的api调用,所以它实际上是在你的视图渲染之前加载的,或者你可以用ng-if =“isDataLoaded”包装你的指令然后在你的设置中将它设置为true