Im kinda new в angularjs, и я пытаюсь создать небольшую базу данных фильмов. Это первый раз, когда я использовал завод, и я хотел убедиться, что это правильный способ сделать это и как использовать этот завод в другой функции, как показано ниже?AngularJS factory
Я хочу, чтобы эта фабрика запускалась только один раз, поэтому я мог использовать ее в любом контроллере, который мне нравится. Однако я потерялся, поэтому не могу использовать $ scope.allMovies в приведенном ниже примере. Заранее спасибо!
var app = angular.module('myApp', []);
app.factory('moviesService', ['$http', function($http) {
var allMovies = [];
var getMovies = function() {
$http.get('js/data.json').success(function(data) {
angular.forEach(data, function(movies) {
allMovies.push(movies);
});
})
}
getMovies();
var getAllMovies = function(){
return allMovies;
}
return {
getAllMovies: getAllMovies
};
}]);
app.controller('listController', ['$scope', 'moviesService', function($scope,moviesService) {
$scope.genres = ['All', 'Crime', 'Drama', 'Action', 'Comedy'];
$scope.allMovies = moviesService.getAllMovies();
$scope.moviesByGenre = [];
$scope.selectedGenre = 'All';
$scope.getMoviesByGenre = function() {
// code to get movies by genre goes here
// cant access $scope.allMovies from here, returns as an empty array
};
}]);
Мой index.html выглядит следующим образом:
<div ng-controller="listController">
<div ng-repeat="movies in allMovies">{{movies.title}}</div>
</div>
Это работает, у меня есть список из movies.title я получаю от data.json.
Однако, когда я пытаюсь console.log $ scope.allMovies изнутри функции getMoviesByGenre, я получаю массив emtpy.
Что вы подразумеваете под своим именем? Вы не можете использовать? Вы получили сообщение об ошибке? –
Итак .. Когда вы называете '$ scope.getMoviesByGenre'? Это только то, что getMovies еще не разрешено, и поэтому вы получаете пустой массив? –
Привет! Я редактировал исходный вопрос, я получаю массив emtpy (только изнутри функции). Надеюсь, это поможет. – Geo