2016-01-03 53 views
0

當然,我應該提到,我是新來的這個東西,所以很抱歉,如果這是微不足道的。Angularjs改變路線不加載數據(ngRepeat)

所以我幾乎有2條路線(意見)。 localhost:3000接收並加載對象列表,localhost:3000/:slug顯示用戶想要查看更多信息的產品信息。

初始上市沒有問題。你訪問localhost:3000,你會看到一個項目列表。

listPhoneController.js:

angular.module('cmscApp').controller('listPhoneController', ['$scope', '$http', '$location', 'searchBoxFactory', 
    function($scope, $http, $location, searchBoxFactory) { 
     $scope.listInfo = searchBoxFactory; 
     $scope.phoneList = []; 

     $http.get('/api/getallphones').then(function(res) { 
      $scope.phoneList = res.data; 
     }, function() { 
      $scope.errorMsg = 'Error in reaching data'; 
     }); 
}]); 

list.html:

<!-- ... ---> 
<div class="result" ng-repeat="phone in phoneList | hasImageFilter:listInfo.imageRequired 
                | nameFilter:listInfo.phoneName 
                | priceFilter:listInfo.price.from:listInfo.price.to"> 
    <!-- filters don't seam to be the problem (removing them still causes the issue) --> 
    <a ng-href="/phone.slug">More info...</a> 
    <!-- ... --> 
</div> 

現在,如果我點擊a標籤,我重定向到該手機的信息視圖(即localhost:3000/samsung-galaxy-s4)和信息正在正確加載。我也有一個後退按鈕那裏,一個簡單的<a ng-href='/'>Back</a>

,當我回去,即使URL變回localhost:3000,列表不會出現。我沒有得到任何錯誤,但沒有發現,但div的不在那裏(檢查時,也沒有)。

這是因爲$http是異步,所以它試圖加載頁面之前,它獲取信息?如果是這樣的話,爲什麼它不像往常一樣綁定數據?

這裏是我的配置:

angular.module('cmscApp').config(function ($routeProvider, $locationProvider) { 
    $routeProvider 
     .when('/', { 
      templateUrl: '/pages/list.html', 
      controller: 'listPhoneController', 
      controllerAs: 'lpc' 
     }) 
     .when('/:phoneSlug', { 
      templateUrl: '/pages/detail.html', 
      controller: 'detailPhoneController', 
      controllerAs: 'dpc' 
     }) 
     .otherwise({ 
      templateUrl: '/error/404.html' 
     }); 

    $locationProvider.html5Mode({ 
     enabled: true, 
     requireBase: false 
    }); 
}); 

任何形式的幫助是非常歡迎!我想將$http中的數據存儲到工廠,然後每次運行控制器時都會載入這些數據,同時更新它。這是一個可行的解決方案,還是有更好的?

+0

是否與'Back改道'任何機會都會再次給你發送''/:phoneSlug''路由並且用一個未定義的phoneSlug調用'detailPhoneController',這暗示問題出在你的鏈接/路由上? 您可以通過記錄控制器初始化來輕鬆測試 –

+0

@Sina Gh nope,我測試併成功地將路由轉到列表PhoneController(初始) – NemanjaT

回答

0

原來的範圍沒有約束力出於某種原因,所以我不得不編輯$http.get().then()方法:

$http.get(...).then(function(res) { 
    $scope.data = res; 
    $scope.$apply(); 
}, function() { ... }); 

任何人利用遇到了類似的問題