Я использую директиву ниже (добавлены только связанные коды), где он устанавливает объект в общем сервисе и загружает другое частичное представление. Из второго контроллера страницы должен быть извлечен ранее установленный объект и показан в пользовательском интерфейсе. Проблема заключается в том, что данные не отображаются в пользовательском интерфейсе, даже console.log()
дает ожидаемые значения. Связано ли это с порядком исполнения?Проблема при вызове функции в директиве AngularJS
Директива:
movieBank.directive('movieSummary', function(commonServices){
return{
restrict : 'E',
template : '<input type="button" value="Detail" class="btn btn-primary button" ng-click="go();">',
scope : {
movie : '@'
},
link: function(scope, elem, attrs){
scope.go = function(){
console.log('clicked ' +scope.movie); // gives correct values
commonServices.setMovie(scope.movie);
commonServices.changeLocation('/movieDetail');
};
}
}
});
Вторая страница conotroller:
movieBank.controller('movieDetailController', function($scope, commonServices){
$scope.movie = commonServices.getMovie();
console.log('got ' + $scope.movie); // gives correct values
});
Услуги:
movieBank.service('commonServices', function(){
var movies = [];
var movie = {};
return {
getMovie : function() {
return movie;
},
setMovie : function(m){
movie = m;
}
};
});
Страница:
<header class="panel-heading">
<span class="title">{{movie.Title}}</span>
<div star-rating rating-value="movie.Rating"></div>
</header>
<p class="panel-body">
{{movie.Description}}
</p>
<div class="panel-body">
Directed By : {{movie.Director}}</br>
Release Year : {{movie.ReleaseYear}}</br>
Language : {{movie.Language}}
</div>
положить commonServices getMovie function – AlainIb
вы должны вызвать его так, чтобы обрабатывать асинхронный вызов 'commonServices.getMovie(). Then (function (res) {$ scope.movie = res})' – AlainIb
у вас есть 'movieDetailController', назначенный странице, на которой вы печатаете' $ scope.movie'? – Sajal