使用" Controller as var"时更新angularjs视图语法

时间:2015-05-01 06:20:57

标签: javascript angularjs

我有一个有3个视图的小网站,每次我更改视图时,都会将新数据加载到其中(主页,搜索sombody。仪表板,关于它们的数据集,详细信息,特定的一个关于一个的详细信息)项)。

我正在加载像这样的数据

<section id="recentSearches" class="frame" data-ng-controller="HomeCtrl as ctrl">
  <h1>Recently Searched</h1>
  <div data-ng-repeat="name in ctrl.recentSearches | reverse">
    <a class="name" href="/#/dashboard/{{name | formatSlug}}" data-ng-bind="name"></a>
  </div>
</section>

仅供参考,recentSearches由服务(这是HomeCtrl)填充在控制器中,如下所示:

this.recentSearches = Services.recentSearches.data;

我的问题是,每次切换视图时,它都不会更新视图中的先前数据,当我重新加载页面时,它会在视图中分配正确的数据(根据视图调用数据)永久链接)。

我认为这种情况正在发生,因为数据不在$scope中?当我有范围内的数据它更新,但我正在完全放弃在范围内存储数据,这是我的最后一次冲击。

非常感谢任何帮助,如果您需要更多信息或代码,请与我们联系。谢谢!

更新:我的一个控制器,另外两个以相同的方式设置。

'use strict';

angular.module('myApp.Controller.Home', ['ngRoute'])

.config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/', {
    templateUrl: 'views/home.html',
    pageTitle: 'Home'
  });
}])

.controller('HomeCtrl', ['Services', '$rootScope', 'RecentGames', 'Summoners', 'Champions', '$filter',
function(Services, $rootScope, RecentGames, Summoners, Champions, $filter) {
  this.slContainer = document.getElementById('summonerLookup');
  this.rsContainer = document.getElementById('recentSearches');
  this.recentSearches = Services.recentSearches.data;



  // Initalize
  // -----------------------
  this.init = function ( ) {
    Services.log('[init][controller] Home');

    // Focus on the form
    this.slContainer.querySelector('input[name=summonerName]').focus();

    // Register Event Listeners
    this.events();

    // Remove the loading overlay
    Services.removeLoading();
  };




  // Assign Events
  // -----------------------
  this.events = function ( ) {

    // The main form input submit
    this.slContainer.addEventListener('submit', this.summonerLookup);

    // The recent searches list
    this.rsContainer.addEventListener('click', this.loadRecentlySearched.bind(this));

  };




  // Submit the lookup form
  // -----------------------
  this.summonerLookup = function ( e, val ) {
    if(e){
      e.preventDefault();
    }

    if(!val){
      val = $filter('formatSlug')(this.summonerName.value);
    }

    Summoners.getByName( val ).then(function success(results){ // Grab the summoner
      RecentGames.get().then(function success(results){ // Populate the summoners recent games
        RecentGames.data = results;
        Champions.getUsed();
      });
    });
  };




  // Load a recently searched profile
  // TODO: load recentsearched from the a tag being clicked, not this.
  // -----------------------
  this.loadRecentlySearched = function ( e ) {
    var el = e.target || e.toElement;
    var isButton = el.className.match(/name/g);

    // Block event if is not button
    if( isButton === null ) { return false; }

    // Get summoner information
    this.summonerLookup( null, $filter('formatSlug')(el.innerHTML) );

    e.preventDefault();
  };




  return this.init();
}]);

0 个答案:

没有答案