我偶然发现了这篇关于如何为表单构建点击编辑功能的文章。作者指出:
如果你想要 input type="date" 甚至是 select 怎么办?您可以在此处向指令的范围添加一些额外的属性名称,例如 fieldType,然后根据该值更改模板中的一些元素。或者对于完全自定义,您甚至可以关闭 replace: true 并添加一个编译功能,该功能包含必要的单击以围绕页面中的任何现有内容编辑标记。
在查看代码时,我似乎无法理解如何操作模板以使其适用于任何角度组件,更不用说如何使其适用于下拉列表了。下面文章中的代码:
app.directive("clickToEdit", function() {
var editorTemplate = '<div class="click-to-edit">' +
'<div ng-hide="view.editorEnabled">' +
'{{value}} ' +
'<a ng-click="enableEditor()">Edit</a>' +
'</div>' +
'<div ng-show="view.editorEnabled">' +
'<input ng-model="view.editableValue">' +
'<a href="#" ng-click="save()">Save</a>' +
' or ' +
'<a ng-click="disableEditor()">cancel</a>.' +
'</div>' +
'</div>';
return {
restrict: "A",
replace: true,
template: editorTemplate,
scope: {
value: "=clickToEdit",
},
controller: function($scope) {
$scope.view = {
editableValue: $scope.value,
editorEnabled: false
};
$scope.enableEditor = function() {
$scope.view.editorEnabled = true;
$scope.view.editableValue = $scope.value;
};
$scope.disableEditor = function() {
$scope.view.editorEnabled = false;
};
$scope.save = function() {
$scope.value = $scope.view.editableValue;
$scope.disableEditor();
};
}
};
});
我的问题是,我们如何扩展上述代码以允许下拉编辑?那就是能够更改为被选中的值。