2015-06-13 4 views
0

В настоящее время я работаю над приложением, которое извлекает данные об изменении $ 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> 

Я не понимаю, почему мой взгляд не обновляется. Я пытаюсь обновить $ scope.artistName, назначив возвращаемый dataFactory.getArtist(newValue) , а также назначив новые данные dataFactory.artistInfo. Я прочитал около $ apply, но мне сложно определить, как применить его в этом контексте. Может ли кто-нибудь помочь?

ответ

2

Получает ли getArtist обещание или значение. Если это обещание, попробуйте что-то вроде ниже:

$scope.$watch('artistName', function(newValue, oldValue){ 
    dataFactory.getArtist(newValue).then(function(value) { 
    $scope.artistInfo = value; 
    }) 
}) 
2

Я думаю, проблема в том, что dataFactory.getArtist(newValue) возвращает обещание, которое вы назначаете непосредственно artistInfo. Попробуйте заменить его на:

dataFactory.getArtist(newValue).then(function (info) { 
    $scope.artistInfo = info; 
}); 
Смежные вопросы