當然,我應該提到,我是新來的這個東西,所以很抱歉,如果這是微不足道的。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
中的數據存儲到工廠,然後每次運行控制器時都會載入這些數據,同時更新它。這是一個可行的解決方案,還是有更好的?
是否與'Back改道'任何機會都會再次給你發送''/:phoneSlug''路由並且用一個未定義的phoneSlug調用'detailPhoneController',這暗示問題出在你的鏈接/路由上? 您可以通過記錄控制器初始化來輕鬆測試 –
@Sina Gh nope,我測試併成功地將路由轉到列表PhoneController(初始) – NemanjaT