2013-07-12 3 views
1

У меня есть простая функция, которая загружает данные в {{my_content}}. Проблема в том, что я хочу выполнить сценарий jQuery myJqueryFunction() после того, как {{my_content}} был обновлен. Код ниже работает, за исключением того, что myJqueryFunction(), кажется, был вызван раньше (или вообще не был?) {{my_content}} был обновлен. Какие-либо предложения?Как я могу вызвать функцию jQuery после обновления данных модели?

$scope.showContent = function(){ 
    $http({ 
     url: "my/url", 
     method: "POST" 
    }) 
    .success(function (data, status, headers, config) { 
     $scope.my_content = data; 
     myJqueryFunction(); 
    }) 
    .error(function (data, status, headers, config) { $scope.status = status; }); 
}; 
+2

Нет причин, по которым это не сработает, пока срабатывает обработчик успеха. Если вы можете сделать Plunkr или JSFiddle, чтобы показать проблему, я посмотрю, но поскольку я не вижу причин, функция не будет вызываться каждый раз, когда запускается обработчик успеха. – shaunhusain

+0

Он называется, я думаю, но его нужно называть ПОСЛЕ '' {{my_content}} '', который был обновлен. Как я могу гарантировать, что он вызывается только после обновления '' {{my_content}} ''? –

+0

Я нашел хорошую статью о $ scope. $ Apply(), которая объясняет немного больше, чем я знал о том, как это работает: http://jimhoskins.com/2012/12/17/angularjs-and-apply.html Но это действительно зависит от того, что вы ожидаете от функции jQuery, которая может быть выполнена в ответ на угловое изменение. Например, если он считывает информацию, вычисленную браузером, тогда эти данные еще не могут быть обновлены, вам может потребоваться вместо этого использовать $ timeout, как это было предложено, что делает то же самое, что и setTimeout в javascript, но также вызывает $ scope. $ Apply автоматически (или прослушивать конкретные события браузера о применении CSS и т. д.) – shaunhusain

ответ

1

Вы можете использовать $timeout, чтобы гарантировать, что такая функция выполняется в последующем применять дайджест цикла.

$timeout(function() { 
    myJqueryFunction(); 
}) 

Обновлено:, конечно, вам придется вводить $timeout в контроллер, добавляя $timeout на аргументы вашего контроллера (возможно, вам нужно конкретно указывать '$timeout' в массиве инжектора, а также, в зависимости от вашего выбора инъекции.)