質問のコレクションを含むレポートを生成しています。
app.controller('reportCtrl', ['$scope','$stateParams', function ($scope, $stateParams) {
$scope.questions: [
{ questionkey: 1, questiontext: 'Type', questiontype: 1 , questionmodel:'accsType' },
{ questionkey: 2, questiontext: 'Reported By', questiontype: 1, questionmodel: 'accsReportedBy' },
{ questionkey: 3, questiontext: 'Time and Date', questiontype: 6, questionmodel: 'accsCurrentDate' },
{ questionkey: 4, questiontext: 'Address', questiontype: 2, questionmodel: 'accsAddress' },
{ questionkey: 5, questiontext: 'Coordinates', questiontype: 6, questionmodel: 'accsCoordinates' },
{ questionkey: 6, questiontext: 'Blank', questiontype: 1, questionmodel: 'accsBlank1' },
{ questionkey: 7, questiontext: 'Blank', questiontype: 1, questionmodel: 'accsBlank2' },
{ questionkey: 8, questiontext: 'Blank', questiontype: 1, questionmodel: 'accsBlank3' },
{ questionkey: 9, questiontext: 'Blank', questiontype: 1, questionmodel: 'accsBlank4' },
{ questionkey: 10, questiontext: 'Details of Survey', questiontype: 2, questionmodel: 'accsDetailsSurvey' },
{ questionkey: 11, questiontext: 'Photos', questiontype: 5, questionmodel: 'accsPhotos' }
];
}]);
質問の種類に応じて質問を描画するカスタム ディレクティブを作成しました。たとえば、質問の種類 1 はテキスト ボックス、種類 2 はテキストエリアです。
<question contents="questions"></question>
app.directive('question', function ($compile) {
return {
transclude: true,
restrict: 'E',
scope: {
contents: '='
},
link: function (scope, element, attrs) {
angular.forEach(scope.contents, function (k, v) {
var ele;
switch (parseInt(k.question.questiontype)) {
case 1:
ele = $compile("<accstextbox data='k.question'></accstextbox>")(scope);
break;
case 2:
ele = $compile("<accstextarea data='k.question'></accstextarea>")(scope);
break;
}
element.append(ele);
});
}
};
});
質問の種類ごとにディレクティブを作成しました
app.directive('accstextbox', [function () {
return {
restrict: 'E',
templateUrl: 'app/directives/questions/textbox.html',
link: function (scope, element, attrs) {
console.log(scope.data); // undefined
},
scope:{
data: '='
}
};
}]);
app.directive('accstextarea', [function () {
return {
restrict: 'E',
templateUrl: 'app/directives/questions/textarea.html',
link: function (scope, element, attrs) {
console.log(scope.data); // undefined
},
scope: {
data: '='
}
};
}]);
これらのディレクティブを動的に追加すると、属性を介してデータ オブジェクトが渡されます。そのデータ オブジェクトは、子ディレクティブ スコープでは定義されていません。プロジェクトに初めてangularjsを使用しています。