0

У меня есть код в разных слоях: 1. Завод, содержащий весь мой запрос на $ http и возвращающий обещание. 2. Контроллер, который обрабатывает это обещание, затем назначает его переменной $ scope, чтобы отобразить ее на gridview.Динамическая сетка с использованием Angularjs

И теперь я пытаюсь создать директиву для обработки 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. Вся идея состоит в том, чтобы создать что-то, что строится после получения x данных от любого приложения. Благодаря!!

+1

Показать источник 'dynamicGrid.html'. Если вы используете переменные (** data **, ** headers **) непосредственно в шаблоне 'dynamicGrid.html', вам не нужно отслеживать изменения в переменных непосредственно в функции' link'. –

ответ

0

вы можете решить апи вызов, так что на самом деле загружен, прежде чем ваш вид делает, или вы можете обернуть вас директиву в нг-если = «isDataLoaded» и в вашем затем установить его на истинный

1

Вы делаете для этого не нужен link function. here - рабочий пример. Вам просто нужно на самом деле связать модель к $scope директивы, сообщив ему, что связываться с:

scope: { 
    data: '=data', 
    headers: '=' 
} 
Смежные вопросы