Próbuję stworzyć niestandardową dyrektywę, która pozwoli mi wyświetlać pytania w ankiecie. Ponieważ mam wiele typów pytań, pomyślałem o stworzeniu pojedynczej dyrektywy i zmianie jej szablonu na podstawie typu pytania.Szablon warunkowy - kontroler "mdRadioGroup", wymagany przez dyrektywę "mdRadioButton", nie można znaleźć
mój dyrektywy:
directive('question', function($compile) {
var combo = '<div>COMBO - {{content.text}}</div>';
var radio = [
'<div>RADIO - {{content.text}}<br/>',
'<md-radio-group layout="row" ng-model="content.answer">',
'<md-radio-button ng-repeat="a in content.answers track by $index" ng-value="a.text" class="md-primary">{{a.text}}</md-radio-button>',
'</md-radio-group>',
'</div>'
].join('');
var input = [
'<div>INPUT - {{content.text}}<br/>',
'<md-input-container>',
'<input type="text" ng-model="content.answer" aria-label="{{content.text}}" required md-maxlength="10">',
'</md-input-container>',
'</div>'
].join('');
var getTemplate = function(contentType) {
var template = '';
switch (contentType) {
case 'combo':
template = combo;
break;
case 'radio':
template = radio;
break;
case 'input':
template = input;
break;
}
return template;
}
var linker = function(scope, element, attrs) {
scope.$watch('content', function() {
element.html(getTemplate(scope.content.type))
$compile(element.contents())(scope);
});
}
return {
//require: ['^^?mdRadioGroup','^^?mdRadioButton'],
restrict: "E",
link: linker,
scope: {
content: '='
}
};
})
Wewnątrz mojego głównego kontrolera Mam listę pytań i po kliknięciu przycisku mam ustawienie aktualnego pytanie, który jest przypisany do mojego dyrektywy.
Wszystko działa dobrze dla pierwszych pytań, ale po tym, jak ustawić aktualną pytanie typu urządzenia radiowego otrzymuję ten błąd:
Error: [$compile:ctreq] Controller 'mdRadioGroup', required by directive 'mdRadioButton', can't be found!
próbowałam dodanie required
do mojego dyrektywy jak poniżej, ale to nie pomogło .
require: ['^mdRadioGroup'],
Nie mogę zrozumieć, co się dzieje, ponieważ wciąż jestem nowy w kanciastości.
Utworzyłem Plunker pokazać mój problem: http://plnkr.co/edit/t0HJY51Mxg3wvvWrBQgv?p=preview
kroki, aby odtworzyć ten błąd:
- Otwórz Plunker
- Kliknij
Next
przycisk dwa razy, aby przejść do (pytanie 3) - Zobacz błąd w konsoli
EDYCJA:
Edytowałem mój Plunker, więc mój model pytań jest widoczny. Jestem w stanie wybrać odpowiedzi, nawet w przypadku pytań, które powodują aktualizację modelu pytań o błąd. Ale nadal dostaję błąd podczas zadawania pytania 3.
Dziękuję za tę propozycję, ale czy mógłbyś mi również pomóc w usunięciu błędu, który dostaję właśnie teraz? – Misiu
To dobre pytanie. Pierwszą rzeczą, którą zauważyłem jest to, że nie masz ng-modelu na swojej 'md-radio-group' – Iamisti
Dodałem' ng-model', ale to nie pomogło. – Misiu