これらの素晴らしい記事のリンクに従って、送信する必要があるデータの性質によって特徴付けられる必要があるウィンドウのテンプレートを動的に作成する独自のディレクティブを作成しました。より明確にするために、アプリはテキスト入力を送信する必要があります。ディレクティブは、ブール値を送信する必要がある場合にチェックボックスではなく、入力領域を作成します。
ディレクティブを正常に取得した後、テンプレートのコンテンツをバインドして返送する際に問題が見つかりました。私はディレクティブ
のドキュメントを読みました。トランスクルードの値が役立つ可能性がありますが、私の試みでは成功しませんでした。以下のコードを記述します。
HTML
<div id="notespace">
<div id="userContainer" >
<template-type content="additionalField">
{{toBind}}
</template-type>
<button ng-click="addNote(toBind)">OK</button>
</div>
</div>
HTMLコントローラーページのJSファイル
var noteCtrl = function ($scope) {
$scope.additionalField=[{
template:'text'
}]
for(var counter=0;counter<$scope.additionalField.length;counter++){
var template;
switch ($scope.additionaField[counter].template) {
case 'text':
template = 'inputNote';
break;
case 'otherTypeOfText':
template = 'areaNote';
break;
case 'number':
template = 'inputNote';
break;
case 'bool':
template = 'checkNote';
break;
case 'file':
template = 'fileNote';
break;
}
}
})
$scope.addNote=function(a) {
alert(a);
}
DIRECTIVE の JSfile
templateApp.directive('templateType',function($compile){
var inputNote='<div><input type="text"/></div>';
var areaNote='<div><textarea ></textarea></div>';
var checkNote='<div><input type="checkbox" /></div>';
var fileNote='<div >file</div>';
var getTemplate=function(type){
var template='';
switch (type) {
case 'inputNote':
template = inputNote;
break;
case 'areaNote':
template = areaNote;
break;
case 'checkNote':
template = checkNote;
break;
case 'fileNote':
template = fileNote;
break;
}
return template;
};
var linker=function(scope,element,attrs){
element.html(getTemplate(scope.content.template));
$compile(element.contents())(scope);
};
return{
restrict:"E",
replace:true,
transclude:true,
link:linker,
scope:{
content:'='
}
};
});
非常に明確にするために、問題は addNote 関数のアラートが何も出力しないか未定義であり、inputArea のようなテンプレートの内容ではないことです。