UI Router - Состояние в URL

0

Здесь, в следующем коде, я должен изменить url при условии добавления, вычитания и умножения.
Я хочу добавить условие для добавления, вычитания и умножения в url, что-то вроде /:add?:subtract?:multiply
поэтому, если я нажимаю на функцию add() только /:add have to work in url same if я click on function only sub()/: subtract 'должны работать в URL-адресе

состояние

angular.module("app");
  .config(function ($stateProvider) {
    $stateProvider.state('main', {
// here in url I have to apply conditions
      'url': '/:add/:subtract/:multiply',
      'abstract': true,
      'templateUrl': '/main.html',
      'controller': 'MainController'
    });
});

контроллер

.controller('LandingController', function ($rootScope, $scope, $state) {
    $scope.add = false;
    $scope.subtract = false;
    $scope.multiply = false;
    $scope.add = function () {
        $state.go("main.addition", {'add': true}, {'reload': true});
    };
    $scope.sub = function () {
        $state.go("main.subtraction", {'subtract': true}, {'reload': true});
    };
    $scope.multiply = function () {
        $state.go("main.multiplication", {'multiply': true}, {'reload': true});
    };
})

============= Main controller =================

.controller('MainController', function ($scope, $stateParams) {
    $scope.add = $stateParams.add;
    $scope.subtract = $stateParams.subtract;
    $scope.multiply = $stateParams.multiply;
});

Когда я нажимаю на метод add() он должен перенаправлять на url '/true/addition..'
Когда я нажимаю на метод sub() он должен перенаправлять на url '/true/subtraction..'
Когда я нажимаю на метод multiply() он должен перенаправлять на url '/true/multiplication..'

Но теперь моя проблема заключается в перенаправлении на url '/true///addition' или '//true//subtraction' или '///true/multiplication' котором отображается правая страница
но когда я обновляю страницу, URL-адрес этого времени будет изменен и сбой приложения.

main.html

<div ng-if="add" > Addition </div>
<div ng-if="subtract" > Subtraction </div>
<div ng-if="multiply" > Multiplication </div>

landing.html

<a href="#" ng-click="add()"> Addition </a>
<a href="#" ng-click="sub()"> Subtraction </a>
<a href="#" ng-click="multiply()"> Multiplication </a>

Здесь add, subtract, multiply - это логические переменные, которые получаются из $state.go.

  • 0
    Я бы не использовал булевы значения сам. Я бы использовал обычный текст, стиль enum: "add", "sub", "multiply" и просто использовал стратегическую логику, чтобы выбрать, какой параметр установить в области. Это будет выглядеть лучше в URL
  • 0
    да @CallumLinington вы правы, но даже если мы будем использовать переменные в стиле enum, то также, как применить к нему условие.?
Показать ещё 2 комментария
Теги:
angular-ui-router

2 ответа

2

Я думаю, что вы пытаетесь добиться этого:

 $stateProvider
    .state('main', {
      'url': '/',
      'abstract': true,
      'templateUrl': '/main.html',
      'controller': 'MainController'
    })
    .state('main.addition',{
      url: ':a/addition'
    })
    .state('main.subtraction',{
      url: ':b/subtraction'
    })
    .state('main.multiplication',{
      url: ':c/multiplication'
    });

main.html

<div ui-view=""></div>

landing.html

<a ui-sref="main.addition({a:true})"> Addition </a>
<a ui-sref="main.subtraction({b:true})"> Subtraction </a>
<a ui-sref="main.multiplication({c:true})"> Multiplication </a>

Трудно сказать, для чего вам нужны эти параметры: a, b, c.

Здесь работает jsfiddle - http://jsfiddle.net/irhabi/gsrg9cok/

Я думаю, это должно выглядеть так: http://jsfiddle.net/irhabi/enurj8uu/

  • 0
    да, вы правы, но я должен наложить условие на контент, который доступен в main.html и именно поэтому я использую эти переменные в stateParams . Я обновил переменные a, b, c в своем вопросе
  • 0
    @ojuskulkarni Проверьте мой jsfiddle в ответе выше. Вам не нужны эти параметры (a, b, c), потому что имя состояния определяет их.
Показать ещё 6 комментариев
1

Я бы предложил указать URL отдельно. потому что, глядя на количество раз, когда он принимает '/', похоже, что он проверяет весь URL-адрес, и слово, которое соответствует отображению, но оно не пропускает, '/'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню