我目前正在开发一款应用程序,可以检索有关$ routeParams更改的数据。所以这就是它的开始:
function artistCtrl($scope, $http, $location, dataFactory, $routeParams){
$scope.artistName = $routeParams.artistname
$scope.$watch('artistName', function(newValue, oldValue){
$scope.artistInfo = dataFactory.getArtist(newValue)
})
$scope.artistInfo = {
artist_name: dataFactory.artistInfo.artist_name,
artist_genre: dataFactory.artistInfo.artist_genre,
artist_imageurl: dataFactory.artistInfo.artist_imageurl,
artist_bio: dataFactory.artistInfo.artist_bio
};
}
此处运行$watch
的回调。 dataFactory.getArtist
从正在成功完成的数据库中检索newValue
。这是这样做的:
dataFactory.js
dataFactory.getArtist = function(artist){
return dataFactory.checkDb(artist).then(function(dbData){
if(dbData.data != "No data"){
dataFactory.artistInfo = dbData.data[0]
}
return dbData.data[0]
})
}
dataFactory.artistInfo = "";
dataFactory
是我在另一个文件中创建的工厂。
artistpage.html
<div class="container this">
<div class="row">
<div class="col-sm-6">
<div><h1>{{artistInfo.artist_name}}</h1></div>
<div rate-yo id='stars' rating="myRating" class="col-sm-4"></div>
<div id='reviews'>23 Reviews</div>
<div><h2>{{artistInfo.artist_genre}}</h2></div>
<div><p>{{artistInfo.artist_bio}}</p></div>
<div><button type="button" class="btn btn-primary" ng-click="somefunc()">Submit a Review</button></div>
</div>
<div class="col-sm-6 reviews">
<div><img class="artistpageimage" src={{artistInfo.artist_imageurl}}></div>
</div>
</div>
</div>
我不明白为什么我的观点没有更新。我试图通过分配返回的dataFactory.getArtist(newValue)
来更新$ scope.artistName
并且通过将新数据分配给dataFactory.artistInfo
我已阅读有关$ apply的内容,但我很难确定如何在此上下文中应用它。有人可以帮忙吗?
答案 0 :(得分:2)
我认为问题是dataFactory.getArtist(newValue)
正在返回一个承诺,您将直接分配给artistInfo
。尝试将其替换为:
dataFactory.getArtist(newValue).then(function (info) {
$scope.artistInfo = info;
});
答案 1 :(得分:2)
getArtist是否返回承诺或值。如果它是一个承诺尝试类似下面的事情:
$scope.$watch('artistName', function(newValue, oldValue){
dataFactory.getArtist(newValue).then(function(value) {
$scope.artistInfo = value;
})
})