#angularjs #angular-ui-router #angularjs-routing
#angularjs #angular-ui-router #angularjs-маршрутизация
Вопрос:
В моем приложении AngularJS у меня есть один шаблон и один контроллер, к которым я могу получить доступ через 2 разных URL:
$routeProvider.when('/site/contents/:obj/:parent/:isnew?', {
templateUrl: '/partials/site/data.html',
resolve: {
loggedin: checkLoggedin
}
});
$routeProvider.when('/site/contents/new-obj', {
templateUrl: '/partials/site/data.html',
resolve: {
loggedin: checkLoggedin
}
});
Второй маршрут должен статически устанавливать параметр isnew= 1, как я бы сделал, используя RewriteRule в apache, но просматривая документацию https://docs.angularjs.org/api/ngRoute/provider /$routeProvider кажется, это невозможно сделать.
Кто-нибудь сталкивался с тем же вопросом?
Ответ №1:
Вы не можете установить параметры маршрута по умолчанию в Angular, если это то, что вы пытаетесь сделать.
Вероятно, лучшей идеей было бы проверить ваш контроллер, если $routeParams.isnew
он установлен, и, если нет, по умолчанию он равен 1.
Предполагается, что угловые маршруты должны быть довольно простыми, а не основываться на шаблонах, как RewriteEngine в apache, поэтому логика должна быть в вашем контроллере.
Ваш контроллер может выглядеть так:
function($routeParams) {
$scope.isNew = ($routeParams.isnew || 1);
}
В вашем случае вам, вероятно, даже может сойти с рук отсутствие isnew
параметра. Используйте первый маршрут для изменения существующих объектов, а второй — для их создания (поэтому наличие obj
в параметрах определяет, является ли он новым или нет).
Комментарии:
1. Ну, это не так просто, потому что даже в первом маршруте я мог бы иметь isnew != 1 вот почему я использую этот параметр. В настоящее время я удалил второй маршрут и использую только один маршрут, передающий строку «(empty)» в качестве параметра obj, но это не то, что я называю «чистым» решением, потому что мне не нравится иметь «правила» или соглашения внутри моего кода.
2. Используется ли ваш первый маршрут для создания объекта, связанного с этим конкретным
obj
иparent
, в то время как второй создает объект, связанный ни с чем? Логика в вашем контроллере все равно будет верной, в любом случае.3. Первый маршрут используется, когда пользователь уже выбрал все нужные мне параметры, второй маршрут используется, когда пользователь еще не выбрал эти параметры, и он / она сделает это прямо на странице (data.html ). Возможно, решением было бы проверить, является ли obj пустым, в этом случае isnew будет неявно true . Опять же, это не то, что я назвал чистым решением.
4. наиболее правильным решением тогда было бы проверить в вашем контроллере, были ли выбраны указанные параметры (так,
obj
иparent
?). Если нет, это совершенно новый, и они должны их ввести. Одно или два условия на самом деле не сделают его «грязным».5. Ну, да, это не совсем «грязно», просто я имел в виду, что я сделал, используя механизм перезаписи. Спасибо, что поделились своими мыслями.