これは、タグを編集可能なテキスト フィールドに置き換える AngularJS ウィジェットです。テキストをクリックすると入力フィールドに置き換えられ、入力で Enter キーを押すと既存のリソースが更新されます。
作成したコードに満足していません。これらすべての evals と apply は本当に必要ですか? どうすればこれを改善できますか?
使用するには
editable-text(model="activeCustomer.phone_number", resource="Customer", field="phone_number")
指令コード
.directive("editableText", function($injector){
return {
restrict: "E",
templateUrl: document.views.directivePartials.editableText,
link: function(scope, elem, attrs){
$(elem).find(".noEdit").click(function(){
scope.showEdit = true;
scope.$apply();
});
var ENTER = 13;
$(elem).find('.edit').keyup(function(event){
if(event.keyCode == ENTER){
var resource = $injector.get(attrs.resource);
var params = {};
params[attrs.field] = scope.value
resource.update(params);
scope.showEdit=false;
}
});
scope.showEdit = false;
scope.$watch(attrs.model, function(){
scope.value = scope.$eval(attrs.model);
});
},
};
})
テンプレート
span.editableTextField
input.edit(type="text", ng-show="showEdit", ng-model="value")
span.noEdit(ng-show="!showEdit") {{value}}