Вам необходимо обновить переменную $scope
новым $routeParams
сразу после смены маршрута. Для этого вы можете прослушивать событие $routeChangeSuccess
. Попробуйте это:
DEMO
app.js
var app = angular.module('plunker', ['ngRoute']);
app.config(['$routeProvider', function($routeProvider){
$routeProvider
.when('/test/:page', {
templateUrl: function(params) {
return 'pidat.html';
},
controller: 'MainCtrl'
});
}
]);
app.controller('MainCtrl', ['$scope', '$http', '$routeParams', function($scope, $http, $routeParams) {
// when controller is loaded params are empty
console.log('on controller load $routeParams', $routeParams);
$scope.name = 'World';
// only after you have transitioned to the new
// route will your $routeParams change so we
// need to listen for $routeChangeSuccess
$scope.$on('$routeChangeSuccess', function(){
console.log('on $routeChangeSuccess load $routeParams', $routeParams);
if ($routeParams.page) {
$scope.name = $routeParams.page;
}
});
}]);
Так что для исходного примера вы, вероятно, придется сделать что-то вроде этого:
$scope.selectedTab = 'first';
$scope.$on('$routeChangeSuccess', function(){
if ($routeParams.page) {
ajax.get(page, function (CbData) {
$scope.selectedTab = page;
});
}
});
Что происходит, когда вы ' console.log (CbData) 'изнутри вашего обратного вызова ajax? Работает ли ваш запрос ajax? И почему вы используете 'ajax' в любом случае, когда у Angular есть собственный' $ http' сервис? Могли бы вы создать демо на плункер? –
Ajax working, он загружает данные в этом HTML-коде. Если do 'console.log ($ scope.selectedTab);' внутри обратного вызова, я вижу значение из '$ routeParams.page'. Он работает – Babaev
Может быть, контроллер загружен раньше, чем работает обратный вызов AJAX? – Babaev