2016-06-23 2 views
0

Таким образом, у меня есть более чем одна пользовательская директива, называющая обещание внутри той же функции в службе, которая получает данные с обещанием. Эта функция внутри службы получает 4 раза (из-за 4-х директив, вызывающих ее). Это проблема. Я хочу, чтобы это вызывалось один раз, а не 4 раза. Как я могу это сделать?Как я могу использовать несколько директив по одному и тому же обещанию в сервисе, только один раз?

Кроме того, извините, я не могу предоставить свой код. Это просто услуга вызова обещание, то возвращение, что вроде как так

службы:

return { 
    GetData: function() { 
    return processData.then(function(response){ 
     return response 
    }); 

processData только кэширование делается в начале файла, где я получаю мои данные с $http.get.

директив:

serviceName.GetData().then(function(response){ 
    //Do Stuff and what not 
}) 
+1

Почему бы не вызвать эту конкретную функцию внутри контроллера, сохранить полученные данные в области контроллера в переменной области видимости и связать это переменная для директив вместо вызова функции в каждом из них? Кроме того, вы можете добавить 'ng-if =" dataReady "' в свои директивы, чтобы добавлять их только тогда, когда данные становятся доступными. –

+0

SO - это сайт для энтузиастов и профессиональных разработчиков, и мы любим держать его профессиональным. Использование всех кепок и таких вещей, как «LOL», не так. –

ответ

2

может хранить объект обещание и к нему можно обращаться несколько раз с then()

var promise = null; 

return { 
    GetData: function() { 
    if (!promise) { 
     promise = proccessData.then(function(response) { 
     return response 
     }); 
    } 
    return promise; 
    } 

Первая директива, которая обращается это установит переменную обещание и все другие будут потом получить то же обещание