У меня есть несколько кнопок с ng-click
в контроллере, и я хочу изменить шаблон директивы a, когда я нажимаю кнопку. Каков наилучший способ добиться этого? (позже я буду использовать слайд в эффекте элемента)
Изменить шаблон директивы с помощью ng-click
Ответы (2)
Директива:
myModule.directive('foo', function() {
return {
scope: {
templateType: '@'
},
template: '<div ng-if="templateType == \'a\'">' +
' this is template A ' +
'</div>' +
'<div ng-if="templateType == \'b\'">' +
' this is template B ' +
'</div>'
};
});
Шаблон:
<foo template-type="{{ templateType }}"></foo>
<a ng-click="templateType = 'b'" href="">Set template to b</a>
Контроллер:
$scope.templateType = 'a';
person
JB Nizet
schedule
09.05.2015
Я бы предложил использовать разные маршруты/представления для каждого частичного представления.
- person harishr; 09.05.2015
что, если оба шаблона большие ..?
- person Pankaj Parkar; 09.05.2015
Затем вы должны преобразовать шаблон в файл и использовать templateUrl, как и для любой другой директивы.
- person JB Nizet; 09.05.2015
@JBNizet, тогда как передать значение
templateType
в templateUrl
- person Pankaj Parkar; 09.05.2015
Вы не передаете templateType в templateUrl. Вы передаете его директиве так же, как и выше. Встраивание шаблона в директиву или загрузка его из URL-адреса не меняет способ работы директивы.
- person JB Nizet; 09.05.2015
@JBNizet, вот о чем я спрашиваю, как бы вы передали значение
templateType
функции templateUrl
- person Pankaj Parkar; 09.05.2015
templateUrl не является функцией. Это строка, содержащая URL-адрес шаблона на сервере. Поэтому вместо
template: 'html code'
вы пишете templateUrl: 'url of the html file containing the html code'
. Остальное идентично.
- person JB Nizet; 09.05.2015
Давайте продолжим обсуждение в чате.
- person Pankaj Parkar; 09.05.2015
Вы можете расширить пример, предоставленный @JB Nizet, и использовать ng-include
для замены шаблонов, и управление шаблонами большего размера станет проще.
myModule.directive('foo', function() {
return {
scope: {
templateType: '@'
},
template: '<div ng-include="\'/templateRoot/\' + templateType">'+
'</div>'
};
});
Теперь вы можете создавать отдельные файлы шаблонов и делать их доступными по определенному URL-адресу (в данном случае /templateroot/a
или /templateroot/b
).
person
Chandermani
schedule
09.05.2015
использование
ng-include
имеет смысл..+1
- person Pankaj Parkar; 09.05.2015