#angularjs #angularjs-scope
#angularjs #angularjs-scope
Вопрос:
Мне нужно передать переменную в $ scope в $ routeProvider. Код следующий:
.when('/:zone/edit/:id', {
templateUrl: 'views/edit.html',
controller: 'EditSet'
})
.when('/articles/edit/:id', {
templateUrl: 'views/edit-article.html',
controller: 'EditSet',
params: {zone: 'articles'}
})
Для получения параметра я использую $scope.params.zone
, который работает в первом случае (:zone) и не работает во втором случае.
Что мне следует делать в этом случае?
Ответ №1:
Поэтому я думаю, вам было бы лучше использовать функцию support в templateUrl
для достижения этой цели:
.when('/:zone/edit/:id', {
templateUrl: function(params) {
if (params.zone == "article") {
return 'views/edit-article.html';
}
return 'views/edit.html';
},
controller: 'EditSet'
})
Ответ №2:
В указанном вами порядке второй маршрут никогда не будет разрешен.
/:zone/edit/:id
будет соответствовать любому значению для :zone
. So /articles/edit/:id
всегда будет разрешаться в /:zone/edit/:id
, как и /foo/edit/:id
or /asdhjkdajksa/edit/:id
.
Кроме того, params: {zone: 'articles'}
не является допустимым свойством маршрута. Если вам нужно, чтобы данные были установлены перед входом в контроллер, вы можете использовать resolve
свойство (хотя я не уверен, что это то, что вам нужно в данном случае).
.when('/articles/edit/:id', {
templateUrl: 'views/edit-article.html',
resolve: { zone: 'articles-zone' },
controller: 'EditSet'
})
.when('/:zone/edit/:id', {
templateUrl: 'views/edit.html',
controller: 'EditSet'
})
Я не знаю, как $scope.params.zone
у вас это работало, это должно быть $routeParams.zone
после того, как вы введете $routeParams
в определение вашего контроллера. Используя вышеуказанные маршруты и этот контроллер, вы получите следующие значения:
angular.module('app').controller('EditSet', function($scope, $routeParams, zone) {
console.log($routeParams.zone);
console.log(zone);
});
/articles/edit/1
-> 'articles'
-> 'articles-zone'
/batman/edit/1
-> 'batman'
-> undefined
Взгляните на примеры документов, чтобы увидеть, как правильно форматировать маршруты.
Комментарии:
1. Большое вам спасибо за ваш ответ! Но
resolve
у меня не сработало, это вызывает ошибку. Я изменил порядок, как вы указали, так что теперь это работает.