Используйте разные маршруты/состояния для каждого субдомена или доменного имени в AngularJS/ui-router.

Мое приложение Angular имеет много разных доменных имен и поддоменов, указывающих на него. Я хотел бы, чтобы каждый из них занимал свое состояние в моей маршрутизации. Как мне это сделать?

Позвольте мне привести пример:

domainname1.com
subdomain.domainname1.com
sub2.domainname1.com 

domain2.com
sub1.domain2.com

ВСЕ указывают на корень моего приложения. Мои маршруты/состояния могут выглядеть примерно так:

    $stateProvider
            .state('Dom1Sub0', {
                url: '/',
                templateUrl: 'views/s0View.html',
                controller: 'domain1Controller as user'
            })
            .state('Dom1Sub1', {
                url: '/',
                templateUrl: 'views/s1View.html',
                controller: 'domain1Controller as user'
            })
            .state('Dom1Sub2', {
                url: '/',
                templateUrl: 'views/s2View.html',
                controller: 'domainController as user'
            })

            .state('Dom2Sub0', {
                url: '/',
                templateUrl: 'views/s0View.html',
                controller: 'domain2Controller as user'
            })
            .state('Dom1Sub1', {
                url: '/',
                templateUrl: 'views/s1View.html',
                controller: 'domain2Controller as user'
            })

Как я могу добавить оператор «если» для каждого состояния на основе домена или поддомена?

УЖЕ:

Я нашел здесь код для извлечения поддомена:

app.factory('subdomain', ['$location', function ($location) { 
        var host = $location.host();
    if (host.indexOf('.') < 0) 
        return null;
    else
        return host.split('.')[0];
}]);

поэтому я могу сделать то же самое для домена:

    app.factory('domain', ['$location', function ($location) {
var host = $location.host();
if (host.indexOf('.') < 0) 
    return host.split('.')[0];
else
    return host.split('.')[1];
}]);

и добавьте их в мой контроллер:

    app.controller('SomeCtrl', ['$scope', 'subdomain', function ($scope, subdomain) {
 // use subdomain same as any other variable
}]);

Но как изменить состояние на основе значения домена и/или поддомена?

Спасибо


person Leon    schedule 31.01.2016    source источник
comment
Просто мысли вслух, но вместо того, чтобы иметь разные состояния, вы можете иметь только одно состояние, а затем определить некоторые параметры, такие как domain и subdomain для состояния. Затем вы можете выбрать соответствующий шаблон с помощью функции шаблона, как показано в этом ответе. Вы можете сделать что-то подобное с контроллерами, используя controllerProvider.   -  person Sunil D.    schedule 31.01.2016
comment
Это было моим первоначальным размышлением. Однако я столкнулся с проблемами, когда хотел использовать параметры состояния как часть URL-адреса. Например, полный URL-адрес может быть следующим: subdomain.domainname1.com/username1234 — это позволяет многопользовательскому приложению иметь любое количество определяемых пользователем страниц. Состояние для этого будет url: '/: usernameParam', ... будет ли это решение работать в этом случае? позже попробую...   -  person Leon    schedule 01.02.2016
comment
На первый взгляд, я думаю, это может сработать. UI Router такой мощный, но когда я намереваюсь сделать что-то амбициозное, всегда требуется немного усилий, чтобы сделать это правильно :)   -  person Sunil D.    schedule 01.02.2016
comment
@ Леон, если ты нашел решение, пожалуйста, опубликуй ответ, я столкнулся с той же проблемой.   -  person Omkar Gokhale    schedule 15.07.2016
comment
Неа. Это единственная функция, которую я не могу исправить с помощью маршрутизатора angular / UI. Кажется возможным, но я просто не могу заставить его работать   -  person Leon    schedule 17.07.2016