Arama giriş kutusundan, filtre damlacıklarının serisinden ve sonuçların görüntülendiği bir UL'den oluşan ajax arama sayfası oluşturuyorum.AngularJS - Bir Hizmetin Model Olarak Kullanılması, ng-yinele güncellenmiyor
Aramanın filtreler bölümü sayfada ayrı bir yerde olacağından, girişleri ve ajax isteklerini bir arama sunucusu tarafına koordine eden bir Hizmet oluşturmanın iyi bir fikir olacağını düşündüm. Bu daha sonra birkaç ayrı kontrolör tarafından çağrılabilir (biri arama kutusu ve sonuç için, diğeri filtreler için).
Mücadele ettiğim en önemli şey, ajax çağrıldığında yenilemenin sonuçlarının alınmasıdır. Ajax'ı doğrudan SearchCtrl Denetleyicisine koyarsam iyi çalışır, ancak ajax'i bir Hizmet'e taştığımda, Hizmet'te bulma yöntemi çağrıldığında sonuçları güncelleştirmeyi durdurur.
Eminim kaçırdığım basit bir şey ama eminim göremiyorum.
Biçimlendirme:
<div ng-app="jobs">
<div data-ng-controller="SearchCtrl">
<div class="search">
<h2>Search</h2>
<div class="box"><input type="text" id="search" maxlength="75" data-ng-model="search_term" data-ng-change="doSearch()" placeholder="Type to start your search..." /></div>
</div>
<div class="search-summary">
<p><span class="field">You searched for:</span> {{ search_term }}</p>
</div>
<div class="results">
<ul>
<li data-ng-repeat="item in searchService.results">
<h3>{{ item.title }}</h3>
</li>
</ul>
</div>
</div>
</div>
angularjs: Burada
var app = angular.module('jobs', []);
app.factory('searchService', function($http) {
var results = [];
function find(term) {
$http.get('/json/search').success(function(data) {
results = data.results;
});
}
//public API
return {
results: results,
find: find
};
});
app.controller("SearchCtrl", ['$scope', '$http', 'searchService', function($scope, $http, searchService) {
$scope.search_term = '';
$scope.searchService = searchService;
$scope.doSearch = function(){
$scope.searchService.find($scope.search_term);
};
$scope.searchService.find();
}]);
kaba JSFiddle, ben ajax dışarı yorumladı ettik ve ben sadece bir örnek olarak elle sonuçları değişken güncelliyorum. Kısalık için filtre bırakmalarını dahil etmedim.
Ben angularjs çok yeniyim, bu yüzden tamamen yanlış bir şekilde bu konuda gidiyorsam, bu yüzden söyle lütfen :)
Teşekkürler Mark. Bulmacanın eksik parçası olan 'angular.copy' parçasıydı. –
Bu şimdi bana tamamen mantıklı geliyor. Diğer 3 hizmet/denetleyici üzerinde çalıştım ama onlar sadece benim itiraf ettiğim dizilerdi, bu yüzden bağlayıcı hiç kırılmadı. Diziyi/nesneyi tamamen değiştirirseniz, kopyayı kullanmanız gerekir! Teşekkürler! – LukeP