我正在尝试构建自定义指令,允许我在调查中显示问题。因为我有多种类型的问题,所以我考虑过创建单个指令并根据问题类型更改它的模板。
我的指令:
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: '='
}
};
})
在我的主控制器中,我有问题列表,单击按钮后,我正在设置分配给我的指令的当前问题。
第一个问题一切正常,但在我将当前问题设置为无线电类型后,我收到此错误:
错误:找不到指令“mdRadioButton”所需的 [$compile:ctreq] 控制器“mdRadioGroup”!
我尝试按如下方式添加required
到我的指令中,但没有帮助。
require: ['^mdRadioGroup'],
我不知道发生了什么,因为我还是 Angular 的新手。
我创建了 Plunker 来显示我的问题:http ://plnkr.co/edit/t0HJY51Mxg3wvvWrBQgv?p=preview
重现此错误的步骤:
- 打开 Plunker
- 单击
Next
按钮两次(导航到问题 3) - 在控制台中查看错误
编辑:
我已经编辑了我的 Plunker,所以我的问题模型是可见的。我能够选择答案,即使是在抛出错误问题模型正在更新的问题中。但是在进行第 3 题时仍然出现错误。