Modifier En Place D'Édition De Contenu
Lors de l'utilisation de ng-repeat
quelle est la meilleure façon d'être en mesure de modifier le contenu?
Dans ma situation idéale de l' ajouté anniversaire serait un lien hypertexte, lorsque cela est exploité, il affichera un formulaire d'édition - juste le même que l'actuel ajouter un formulaire avec un bouton de mise à jour.
HTML:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="utf-8">
<title>Custom Plunker</title>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
<script>
document.write('<base href="' + document.location + '" />');
</script>
<script src="app.js"></script>
<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.2.0/css/bootstrap-combined.min.css"
rel="stylesheet">
</head>
<body ng-app="birthdayToDo" ng-controller="main">
<div id="wrap">
<!-- Begin page content -->
<div class="container">
<div class="page-header">
<h1>Birthday Reminders</h1>
</div>
<ul ng-repeat="bday in bdays">
<li>{{bday.name}} | {{bday.date}}</li>
</ul>
<form ng-show="visible" ng-submit="newBirthday()">
<label>Name:</label>
<input type="text" ng-model="bdayname" placeholder="Name" ng-required/>
<label>Date:</label>
<input type="date" ng-model="bdaydate" placeholder="Date" ng-required/>
<br/>
<button class="btn" type="submit">Save</button>
</form>
</div>
<div id="push"></div>
</div>
<div id="footer">
<div class="container">
<a class="btn" ng-click="visible = true"><i class="icon-plus"></i>Add</a>
</div>
</div>
</body>
App.js:
var app = angular.module('birthdayToDo', []);
app.controller('main', function($scope){
//Start as not visible but when button is tapped it will show as true
$scope.visible = false;
//Create the array to hold the list of Birthdays
$scope.bdays = [];
//Create the function to push the data into the "bdays" array
$scope.newBirthday = function(){
$scope.bdays.push({name:$scope.bdayname, date:$scope.bdaydate});
$scope.bdayname = '';
$scope.bdaydate = '';
};
});
- Est-ce que votre question reportez-vous à la mise en œuvre effective ou de la conception de l'interface?
- Il était censé être la mise en œuvre de la conception de l'interface est facile
- Je suis arrivé ici à la recherche de ce que vous voulez, mais avez-vous remarqué que vous êtes à la répétition de l'élément ul au lieu de la batterie au lithium? Le résultat est que vous avez autant de
ul
's comme des éléments, ce qui n'est pas correct.
Vous devez vous connecter pour publier un commentaire.
Vous devriez mettre la forme à l'intérieur de chaque nœud et l'utilisation
ng-show
etng-hide
pour activer et désactiver la modification, respectivement. Quelque chose comme ceci:Les points clés sont ici:
ng-model
à la portée localeng-show
àform
donc on peut le montrer lors de l'éditionspan
avec unng-hide
afin de masquer le contenu lors de l'éditionng-click
, qui pourrait être dans n'importe quel autre élément, qui permet deediting
àtrue
ng-submit
à basculeediting
àfalse
Ici est votre mise à jour Plunker.
$scope.visible = false
surnewBirthday()
. Cela rendra le formulaire d'Ajout à disparaître lorsque vous ajoutez un élément.ngShow
etngHide
n'arrête pas de fonctionnalité - ils juste ajouterdisplay: none
à la CSS. Si toutes les liaisons sont encore câblé et le DOM est toujours manipulé. Si nous avons fait ceci comme une directive, que l'on peut appeler la forme de la création à la demande. Voici une simple modification de la directive j'ai créé un tout à l'arrière pour illustrer: jsfiddle.net/joshdmiller/NDFHg. Et plus compliqué: plnkr.co/modifier/LVUIQD.ng-show
/ng-hide
, à l'exception de supprimer l'élément du DOM et de la détruire au lieu de 'affichage-noning' il.Je cherchais une édition en ligne de la solution et j'ai trouvé un plunker qui semblait prometteur, mais il ne fonctionne pas pour moi hors de la boîte. Après quelques retouches avec le code que j'ai eu de travail. Bravo à la personne qui a fait l'effort initial pour le code de cette pièce.
L'exemple est disponible ici http://plnkr.co/edit/EsW7mV?p=preview
Voici le code:
Directive modèle:
L'utiliser simplement ajouter de l'eau:
Mise à JOUR:
Une autre option est d'utiliser le readymade Xeditable pour AngularJS:
http://vitalets.github.io/angular-xeditable/
J'ai modifié votre plunker pour le faire fonctionner via angulaires-xeditable:
http://plnkr.co/edit/xUDrOS?p=preview
C'est une solution commune pour la modification en ligne - vous creale de liens hypertextes avec des
editable-text
directivequi permet de basculer dans
<input type="text">
tag:Pour la date j'ai utilisé
editable-date
directive qui permet de basculer en html5<input type="date">
.Puisque c'est une pièce commune de fonctionnalité, il est une bonne idée de rédiger une directive ce. En fait, quelqu'un l'a déjà fait et open source il. J'ai utilisé editablespan bibliothèque dans un de mes projets et il a parfaitement fonctionné, fortement recommandé.