Angular: Editable directive
http://angularjs.org/
HTML
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<html ng-app="my">
<div ng-controller="MyCtrl">{{name}}
<editable ng-model="name"></editable>
</div>
</html>
CSS
editable {
border: 1px solid red;
}
JavaScript
var app = angular.module("my", []);
app.directive('editable', function() {
var editTemplate = '<input type="text" ng-model="inputValue" \
ng-show="inEditMode" ng-dblclick="switchToViewMode()" \
class="form-control input-sm">';
var viewTemplate = '<div ng-hide="inEditMode" \
ng-dblclick="switchToEditMode()">{{ value }}</div>';
return {
restrict: 'E',
scope: {
value: '=ngModel',
bindAttr: '='
},
controller: function($scope) {
$scope.inputValue = $scope.value;
},
replace: true,
compile: function(tElement, tAttrs, transclude) {
tElement.html(editTemplate);
tElement.append(viewTemplate);
return function(scope, element, attrs) {
scope.inEditMode = false;
scope.switchToViewMode = function() {
scope.inEditMode = false;
scope.value = scope.inputValue;
}
scope.switchToEditMode = function() {
scope.inEditMode = true;
}
scope.toggleMode = function() {
scope.inEditMode = !scope.inEditMode;
}
element.bind("keydown keypress", function(event) {
if (event.keyCode === 13) {
scope.$apply(function() {
scope.switchToViewMode();
});
}
});
}
}
}
});
app.controller('MyCtrl', function ($scope) {
$scope.name=12345678;
});