Angularjs един и същ шаблон и контролер на различни URL адреси

Имам приложение, което може да работи в два контекста -- 1) Глобален и 2) Клиентски

Когато в глобален контекст URL адресите са като този mydomain.com/#login, mydomain.com/#register, но когато са в клиентски контекст, URL адресите са като този mydomain.com/#/ClientKey/login и mydomain.com/#/ClientKey/ регистрирам. И в двата контекста искам да отворя абсолютно същия шаблон, т.е. login.html и register.html. Един от начините да постигнете това е да репликирате routeProvider.when и за двата случая, както следва

 $routeProvider.when('/:ClientKey/_login', { 
                templateUrl: 'views/login.html',
                controller: 'LoginCtrl', 
            })

 $routeProvider.when('/_login', { 
                templateUrl: 'views/login.html',
                controller: 'LoginCtrl', 
            })

Въпросът ми е, че има начин да го направя в един routeProvider.when, вместо да го репликирам два пъти само с малка разлика. Това е важно за моето приложение, защото има няколко такива връзки като влизане, регистрация, редактиране на профил, промяна на паролата и т.н.


person Shamaila Tahir    schedule 21.03.2014    source източник


Отговори (1)


Като този?

var routes = {
    '/_login' : { templateUrl: 'views/login.html', controller:'LoginCtrl' }
    ...
}

for (var k in routes) {
    $routeProvider
        .when(k, routes[k])
        .when('/:clientId' + k, routes[k]);
}

Редактиране:

Всъщност можете да правите незадължителни групи с ?, така че следното може да работи.

$routeProvider.when(':clientId?/_login', { ... });
person Master Morality    schedule 21.03.2014
comment
да, по-добре е, но angular предоставя ли нещо като .when(k | '/:clientId' + k, routes[k]) - person Shamaila Tahir; 21.03.2014
comment
@ShamailaTahir, angular не ни позволява да посочим множество пътища с оператор OR(| / ||). Незадължителните групи, използващи ‹code›?‹/code›, са добро решение за вашия проблем. - person Siva; 12.06.2014