从数据库

时间:2015-06-13 21:25:08

标签: javascript angularjs

我目前正在开发一款应用程序,可以检索有关$ 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的内容,但我很难确定如何在此上下文中应用它。有人可以帮忙吗?

2 个答案:

答案 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;
  })
})