在我正在开发的应用程序中,用户可以从下拉菜单中输入表单类型,并通过单击按钮调用指令创建新表单。实际上,创建的表单是另一个指令,它被编译到作用域并附加到DOM中的包装器元素中。以下是创建新指令的单击指令的代码。
每个创建的新表单都有一个隔离作用域,因为用户需要同时处理多个表单并保存和编辑这些表单。'type' 作为属性传递给新表单。这是在点击时创建的新指令。
当表单被保存后,会添加到视图中可滚动的列表中。
对于首次创建和保存表单而言,一切都很顺利。但当用户需要从视图中的表单列表中打开一个表单时,就会出现困难。与创建新表单不同的是,在已完成的表单中创建指令需要将保存的对象数据传递给新的指令。
我想知道是否有人遇到过这种情况,即点击指令会创建一个元素指令,并需要与数据一起打包?
(function(){
'use strict';
//on 'add new rule' btn click, a new form is created
function createRuleForm($compile){
function linkFn(scope, element, attrs){
function onClickAddForm(){
var type = scope.rcCtrl.ruleType;
var newDirective = angular.element('<rule-form type="'+type+'"></rule-form>');
var formWrap = document.querySelector('.edit-rc__div--rf-wrapper');
angular.element(formWrap).append(newDirective);
$compile(newDirective)(scope)
}
element.bind('click', onClickAddForm)
}
return{
restrict: 'A',
link: linkFn
}
}
angular.module('ganeshaApp')
.directive('createRuleForm', [
'$compile',
createRuleForm
])
})();
每个创建的新表单都有一个隔离作用域,因为用户需要同时处理多个表单并保存和编辑这些表单。'type' 作为属性传递给新表单。这是在点击时创建的新指令。
(function(){
'use strict';
function ruleForm(ModalService, CurrentDateService, SaveRule, RULE_PHRASE){
var index = 0;
//directive controller
function RuleFormCtrl($scope, $element, $attrs){
var rfCtrl = this;
//values
rfCtrl.ruleType = $scope.$parent.rcCtrl.ruleType;
rfCtrl.ruleTitle = 'L_' + $attrs.type + index;
rfCtrl.phrase = RULE_PHRASE[$attrs.type]
rfCtrl.fullDate = CurrentDateService.getCurrentDate()
//functions
rfCtrl.saveOneRule = saveOneRule;
rfCtrl.closeRule = closeRule;
//saves one rule on click of save button or on timeout
function saveOneRule(){
rfCtrl.html = $element.find('.edit-rf__div--textdiv').html();
var ruleObject = {
'index' : index,
'ruleText' : rfCtrl.ruleText,
'ruleTitle' : rfCtrl.ruleTitle,
'ruleType' : rfCtrl.ruleType,
'typePhrase' : rfCtrl.phrase,
'html' : rfCtrl.html,
'fullHtml' : rfCtrl.phrase + rfCtrl.html
}
SaveRule.pushRule(ruleObject)
$scope.ruleForm.$setPristine();
index++;
}
function closeRule(){
if($scope.ruleForm.$dirty){
var modal = {
"mssg" : 'You have unsaved changes to this rule. Would you like to save them before closing?',
"confirm" : 'Yes, please.',
"reject" : 'No, thank you.'
}
ModalService.openModal(modal).
then(function(res){
console.log(res)
saveOneRule();
$element.remove();
}).catch(function(err){
console.log(err)
})
}else{
$element.remove();
}
}
}
return{
restrict: 'E',
replace: true,
scope: {},
templateUrl: 'modules/edit/edit-create/ruleForm.html',
controller: RuleFormCtrl,
controllerAs: 'rfCtrl'
};
}
angular.module('ganeshaApp')
.directive('ruleForm', [
'ModalService',
'CurrentDateService',
'SaveRule',
'RULE_PHRASE',
ruleForm
]);
})();
当表单被保存后,会添加到视图中可滚动的列表中。
对于首次创建和保存表单而言,一切都很顺利。但当用户需要从视图中的表单列表中打开一个表单时,就会出现困难。与创建新表单不同的是,在已完成的表单中创建指令需要将保存的对象数据传递给新的指令。
我想知道是否有人遇到过这种情况,即点击指令会创建一个元素指令,并需要与数据一起打包?