AngularJS - en Utilisant un Service comme un Modèle, ng-repeat pas de mise à jour

Je suis de la création d'un ajax page de recherche qui consistera en une recherche d'entrée de la boîte, la série de filtre de menus déroulants, puis une UL où les résultats sont affichés.

Comme les filtres partie de la recherche sera dans un autre endroit de la page, j'ai pensé que ce serait une bonne idée de créer un Service qui traite de la coordination entre les entrées et les requêtes ajax pour une recherche de serveur-côté. Cela peut ensuite être appelé par un couple de boutons séparés (un pour "searchbox" et les résultats, et une pour les filtres).

La principale chose que je suis mal, c'est obtenir des résultats pour actualiser lors de l'ajax est appelé. Si je mets de l'ajax directement dans le SearchCtrl Contrôleur, il fonctionne très bien, mais quand je bouge l'ajax pour un Service qu'il arrête la mise à jour des résultats lorsque la méthode find sur le Service est appelé.

Je suis sûr que c'est quelque chose de simple, je l'ai raté, mais je n'arrive pas à le voir.

Balisage:

<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:

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();
}]);

Ici est une ébauche de JSFiddle, j'ai commenté l'ajax et je suis juste mise à jour des résultats de la variable manuellement comme un exemple. Par souci de concision, je n'ai pas inclus le filtre menus déroulants.

http://jsfiddle.net/XTQSu/1/

Je suis très nouveau pour AngularJS, donc si je vais à ce sujet dans le mauvais sens, merci de me le dire 🙂

OriginalL'auteur Steve Holland | 2013-03-11