2015-11-03 2 views
0

Я создал простую директиву, которая показывает все фильмы в моем кино объемеДиректива не обновляется при добавлении новых записей

app 
    .directive('movieOverview', function() { 
    return { 
     template: '<div ng-repeat="movie in movies">Name: {{movie.title}}</div>', 
     controller: 'searchCtrl', 
    }; 
    }); 

Но когда я добавляю свою директиву к моим application.html.erb он не получает обновляется, когда новая запись добавляется в область фильма. Мне нужно обновить страницу, чтобы увидеть новые записи.

Я думал, что директивы могут быть использованы за пределами областей и т.д.

Это функция addMovie от моего searchCtrl (который я использую с директивой).

$scope.addMovie = function() { 

    'http://api.themoviedb.org/3/movie/206647?api_key=a8f7039633f2065942cd8a28d7cadad4&append_to_response=releases' 
    // Search for release dates using the ID. 
    var base = 'http://api.themoviedb.org/3/movie/'; 
    var movieID = $(event.currentTarget).parent().find('.movieID').text() 
    var apiKey = 'a8f7039633f2065942cd8a28d7cadad4&query=' 
    var append_to_response = '&append_to_response=releases' 
    var callback = 'JSON_CALLBACK'; // provided by angular.js 
    var url = base + movieID + '?api_key=' + apiKey + append_to_response + '&callback=' + callback; 

    $http.jsonp(url,{ cache: true}). 
     success(function(data, status, headers, config) { 

     if (status == 200) { 

      $scope.movieListID = data; 
      console.log($scope.movieListID); 

      var releaseNL; 

      for (var i = 0; i < $scope.movieListID.releases.countries.length; i++) { 
      var release = $scope.movieListID.releases.countries[i]; 
      if (release['iso_3166_1'] == 'NL') { 
       releaseNL = release; 
      } 
      } 

      if(typeof releaseNL === 'undefined'){ 
      // With release date 

      Notification($scope.movieListID.original_title + ' is toegevoegd, maar heeft nog geen Nederlandse premiere datum.'); 

      createMovie.create({ 
       title:   $scope.movieListID.original_title, 
       release_date: $scope.movieListID.release_date, 
       image:   $scope.movieListID.poster_path, 
       movie_id:  $scope.movieListID.id 
      }).then(init); 

      } else { 
      Notification.success($scope.movieListID.original_title + ' is toegevoegd.'); 

      createMovie.create({ 
       title:   $scope.movieListID.original_title, 
       release_date: releaseNL.release_date, 
       image:   $scope.movieListID.poster_path, 
       movie_id:  $scope.movieListID.id 
      }).then(init); 
      }; 

Важно, чтобы увидеть здесь является .then(init);

var init = function(){ 

    movieService.loadMovies().then(function(response) { 
     $scope.movies = response.data; 
    }); 

    } 
    init(); 

добавить фильм, а затем выполнить функцию инициализации, которая выстреливает сервис под названием loadMovies

.factory('movieService', ['$http', function($http) { 
    return { 
    loadMovies: function() { 
     return $http.get('/movies.json'); 
    } 
    }; 
}]) 

Какие запросы новых фильмов и затем обновляет представление.

+0

вы можете добавить код, в котором вы добавляете фильм в сферу ? – thsorens

+0

@thsorens Я добавил код с моего контроллера. –

+0

Я бы, вероятно, искал кэширование в вашем json-файле. Вместо того, чтобы перезагружать все, почему бы вам просто не вставить результат в свой список фильмов? $ Scope.movies.push (thenewmovie); – thsorens

ответ

0
var newMovie = { 
      title:   $scope.movieListID.original_title, 
      release_date: $scope.movieListID.release_date, 
      image:   $scope.movieListID.poster_path, 
      movie_id:  $scope.movieListID.id 
     };   

createMovie.create(newMovie).then(function(){ 
    $scope.movies.push(newMovie); 
}); 

вы также можете попробовать сделать что-то подобное в вашей директиве:

scope: { 
    movies: '=movies' 
}, 

Это создает двустороннюю привязку

+0

Оба предложения не работают. Когда я добавляю новую запись, представление не обновляется. –

Смежные вопросы