2015-08-30 2 views
1

Я хочу иметь кнопку, обновите страницу с (запросом HTTP для загрузки данных):кнопка обновления не работает в угловом

http://plnkr.co/edit/Ol6iEoLp037ZHu0P40Wr?p=preview

кнопка обновления с заводом - - не работает

$scope.doRefresh = function() { 
      Content.content.success(function(data){ 

       $scope.data = data.artists; 
       console.log($scope.data); 
       $scope.$broadcast('scroll.refreshComplete'); 
      }); 

Теперь, когда вы удаляете некоторые данные и хотите иметь тему назад, вы должны нажать кнопку обновления, но она не работает.

работает демо
http://plnkr.co/edit/WHSEPxyQDi3YNkEP8irL?p=preview

$scope.doRefresh = function() { 


    $http.get("data.json") 
    .success(function(data) { 
     $scope.data = data.artists; 
     console.log($scope.data); 
     $scope.$broadcast('scroll.refreshComplete'); 
    }) 

} теперь работает с $ HTTP

Я хочу сделать это с завода, но я не могу справиться с этим, любой совет ?

Update *****

завод

app.factory('Content', function ($http) { 
    return { 
     content: $http.get('data.json') 
    } 
}) 
+0

Что Контента делать? можете ли вы поделиться с ним кодом? – toskv

+0

Контент = app.factory ('Содержание', функция ($ HTTP) { возвращение { содержание: $ http.get ('data.json') } }) – sani

+0

запрос data.json и вызвать завод в контроллере – sani

ответ

2

Вы должны рассказать свою службу, чтобы получить данные каждый раз, когда содержание запрашивается.

app.factory('Content', function ($http, $q) { 
 
    
 
    return { 
 
     getContent: function() { 
 
      var deferred = $q.defer(); 
 
      $http.get('data.json').succes(function(data) { 
 
      deferred.resolve(data);   
 
      }); 
 
      return deferred.promise; 
 
     } 
 
    } 
 
})

Тогда в вашем контроллере вы можете сделать:

$scope.doRefresh = function() { 
 
    Content.getContent().then(function(data) { 
 

 
     $scope.data = data.artists; 
 
     console.log($scope.data); 
 
     $scope.$broadcast('scroll.refreshComplete'); 
 
    });

Вы также можете просто кэшировать данные на вашем заводе и вернуть его, не делая запрос:

app.factory('Content', function($http, $q, $timeout) { 
 
    var originalData; 
 

 
    return { 
 
    getContent: function() { 
 
     var deferred = $q.defer(); 
 
     if (!originalData) { 
 
     $http.get('data.json').succes(function(data) { 
 
      originalData = data; 
 
      deferred.resolve(data); 
 
     }); 
 
     } else { 
 
     /// gonna use timeout to simulate async behaviour -- kinda hacky but it makes for a pretty interface 
 
     $timeout(function() { 
 
      defered.resolve(originalData); 
 
     }, 0); 
 

 
     } 
 

 
     return deferred.promise; 
 
    } 
 
    } 
 
})

Осторожны, изменения, сделанные в возвращаемый объект будет влиять на объект originalData.

+0

спасибо, много, научи меня – sani

+1

да, будьте осторожны. Когда я использую $ q.defer() без ответа на успех, мой браузер застыл. потому что он отправил много запросов в API –

2
app.factory('Content', function ($http) { 
    function getContent(onSuccess) { 
     $http.get('data.json').success(function (data) { 
      if (onSuccess) { 
       onSuccess(data) 
      } 
     } 
    } 

    return { 
     content: getContent 
    } 
}) 

в контроллере:

$scope.doRefresh = function() { 
    Content.content(function (data) { 

     $scope.data = data.artists; 
     console.log($scope.data); 
     $scope.$broadcast('scroll.refreshComplete'); 
    }); 
}; 
+0

спасибо за ваш ответ – sani

Смежные вопросы