2014-12-19 4 views
2

После урока:Angularjs UI-маршрутизатор: условные вложенные просмотры имени

http://scotch.io/tutorials/javascript/angular-routing-using-ui-router

и демо:

http://scotch.io/demos/angular-ui-router#/about

На о странице есть две названные виды, " columnOne "и" columnTwo ".

Возможно ли создать экземпляр именованных видов условно, если какое-либо условие выдает именованный вид «columnOne», и его контроллер не должен создавать экземпляр, а его место остается пустым на странице.

Я хотел бы избежать использования ng-if, если вы не хотите, чтобы контроллер загружал, таким образом, сохраняя вызовы API, которые могут иметь контроллеры.

Что-то вроде отклонения в блоке разрешения, но для родственников с именами.

ответ

2

UI Router предоставляет нам два «секретных соуса», templateProvider и услугу $templateFactory.

Функция поставщика шаблонов, которая может быть введена, имеет доступ к locals и должна возвращать шаблон HTML.

Таким образом, в рамках этой функции вы можете установить свои условные выражения для визуализации шаблона для именованного вида. templateProvider() позволяет нам возвращать HTML, но предположим, что мы хотим вернуть шаблон для удобства чтения или любой другой причины, по которой вы могли бы иметь. Вот где мы будем использовать $ templateFactory и называют .fromUrl() на нем:

$ templateFactory.fromUrl() загружает шаблон из URL-адрес с помощью $ HTTP и $ templateCache.

views: { 
    'columnOne': { 
    controller: 'SomeCtrl', 
    templateProvider: function($templateFactory) { 
     // if condition is true, return the template for column one 
     return $templateFactory.fromUrl('path/to/template.html'); 
    } 
    }, 
    'columnTwo': { 
    controller: 'MaybeSomeOtherCtrl', 
    templateProvider: function($templateFactory) { 
     // if condition is true, return the template for column two 
     return $templateFactory.fromUrl('path/to/template.html'); 
    } 
    } 
} 
Смежные вопросы