0
我對angularJS仍然很陌生,但一直在閱讀大量資料,最後開始測試我正在學習的東西。我目前正在嘗試編寫使用達到last.FM API的服務的代碼,並返回類似藝術家的列表。我從API返回的結果很好,如果我將它們發送到控制檯,可以看到結果。也就是說,在我執行一次搜索後,所有後續搜索都不會正確更新範圍。我的代碼如下:AngularJS示波器在新請求後不會更新
控制器
.controller('lastFMController', function($scope, lastFM) {
$scope.search = function(artist) {
lastFM.getSimilar(artist).then(function(result) {
$scope.artists = result.similarartists.artist;
}, function(error) {
$scope.error = error;
});
};
});
查看
<form role="form">
<div class="form-group">
<label for="artist">search for a music artist and see similiar artists</label>
<input type="text" name="artist" class="form-control" ng-model="artist" placeholder="type an artist's name">
</div>
<button type="submit" class="btn btn-default" ng-click="search(artist)">search</button>
</form>
<hr ng-if="artists" />
<div class="row">
<div class="col-sm-6 col-md-4 fade in" ng-repeat="artist in artists">
<h3>{{ artist.name }}</h3>
<p><a target="_blank" href="http://{{ artist.url }}" class="btn btn-primary" role="button">view on last.fm</a></p>
</div>
</div>
服務
.factory('lastFM', function($q, $http) {
var deferred = $q.defer(),
self = this,
apiKey = "KEY";
return {
getSimilar: function(artist) {
this.url = 'http://ws.audioscrobbler.com/2.0/?method=artist.getsimilar&artist=' + artist + '&api_key=' + apiKey + '&format=json&autocorrect=1';
this.error = false;
$http.get(this.url).success(function(data) {
if (data.error) {
deferred.reject(data.error.message);
}
else if (!angular.isUndefined(data.similarartists) && angular.isObject(data.similarartists.artist)) {
deferred.resolve(data);
}
else {
deferred.reject('Something went wrong');
}
});
return deferred.promise;
}
};
});
正如我所說的,W如果我進行初步搜索,我會得到一個顯示的結果,但所有後續搜索都不會更新範圍。我嘗試了$ scope。$ apply,但它表示它已經在運行該命令。有任何想法嗎?
謝謝,這是有道理的。我沒有意識到一旦解決工廠問題就會永久解決。現在所有的作品。 – dansackett