2017-02-07 6 views
0

У меня есть приложение с базой приложения состоянием пользовательского интерфейса маршрутизатор ...Как остановить UI-маршрутизатор от перегрузки решительности, когда PARAMS изменить

$stateProvider.state('app', { 
    navigationTitleKey : 'app', 
    abstract: true, 
    url: '/?{param}', 
    views: obj 
}); 

А потом child и grand-child состояния ...

$stateProvider.state('app.wizardchild', { 
    parent: 'app', 
    url: '/wizard', 
    resolve: { 
    wizard: ['wizard',function(wizard) { 
     return new wizard(); 
    }], 
    }, 

$stateProvider.state('app.wizardgrandchild', { 
     parent: 'app.wizardchild' 
    } 

Когда я ...

$state.go('app.wizardgrandchild') из app.wizardchild

Работает так, как ожидалось, и мастер был разрешен только один раз.

Но когда я $state.go('app.wizardgrandchild', {param:'blah'}) от app.wizardchild

Он повторно запускает Решимость блок означает, что на grand-child состоянии имеет новую копию мастера. Но я не хочу, чтобы это произошло. Я хочу, чтобы это было одно и то же, что и другая копия. Есть ли способ отключить это поведение?

ответ

0

Просьба зарегистрировать wizard как услугу (не заводская). Поскольку все Угловые сервисы являются одиночными, это должно решить вашу проблему. Теперь каждый раз, когда вы создаете новый экземпляр мастера с помощью new - если вы используете сервис Угловая автоматически создает экземпляр и придать ему каждый раз, когда это необходимо (каждый раз, когда тот же экземпляр будет впрыскивается)

0

Ваш param объявлен на app государство. Когда параметр состояния изменяется, он перезагружается с использованием нового значения параметра. Когда государство перезагружается, все его дети также перезагружаются.

Если вы можете переместить объявление параметра в состояние внука, это должно решить проблему.

В качестве альтернативы вы можете сохранить param в состоянии приложения и mark it as dynamic. Динамические параметры не приведут к перезагрузке состояния.

$stateProvider.state('app', { 
    navigationTitleKey : 'app', 
    abstract: true, 
    url: '/?{param}', 
    params: { param: { dynamic: true } }, 
    views: obj 
}); 

Если вы используете пользовательский интерфейс маршрутизаторами наследие (0.X), there is reloadOnSearch, которая похожа, но может быть багги.

$stateProvider.state('app', { 
    navigationTitleKey : 'app', 
    abstract: true, 
    url: '/?{param}', 
    reloadOnSearch: false, 
    views: obj 
});