diff options
Diffstat (limited to 'docs/cookbook.formadvanced.ngdoc')
| -rw-r--r-- | docs/cookbook.formadvanced.ngdoc | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/docs/cookbook.formadvanced.ngdoc b/docs/cookbook.formadvanced.ngdoc index 5b93b33e..478358db 100644 --- a/docs/cookbook.formadvanced.ngdoc +++ b/docs/cookbook.formadvanced.ngdoc @@ -2,3 +2,81 @@ @ngdoc overview @name Cookbook: Advanced Form @description + +Here we extend the basic form example to include common features such as reverting, dirty state detection, and preventing invalid form submission. + +<doc:example> + <doc:source> + <script> + function UserForm(){ + this.master = { + name: 'John Smith', + address:{ + line1: '123 Main St.', + city:'Anytown', + state:'AA', + zip:'12345' + }, + contacts:[ + {type:'phone', value:'1(234) 555-1212'} + ] + }; + this.cancel(); + } + + UserForm.prototype = { + cancel: function(){ + this.form = angular.copy(this.master); + }, + + save: function(){ + this.master = this.form; + this.cancel(); + alert('SAVED: ' + angular.toJson(this.master)); + } + }; + </script> + <div ng:controller="UserForm"> + + <label>Name:</label><br/> + <input type="text" name="form.name" ng:required/> <br/><br/> + + <label>Address:</label><br/> + <input type="text" name="form.address.line1" size="33" ng:required/> <br/> + <input type="text" name="form.address.city" size="12" ng:required/>, + <input type="text" name="form.address.state" size="2" ng:required ng:validate="regexp:/^\w\w$/"/> + <input type="text" name="form.address.zip" size="5" ng:required ng:validate="regexp:/^\d\d\d\d\d$/"/><br/><br/> + + <label>Phone:</label> + [ <a href="" ng:click="form.contacts.$add()">add</a> ] + <div ng:repeat="contact in form.contacts"> + <select name="contact.type"> + <option>email</option> + <option>phone</option> + <option>pager</option> + <option>IM</option> + </select> + <input type="text" name="contact.value" ng:required/> + [ <a href="" ng:click="form.contacts.$remove(contact)">X</a> ] + </div> + <button ng:click="cancel()" disabled="{{master.$equals(form)}}">Cancel</button> + <button ng:click="save()" disabled="{{$invalidWidgets.visible() || master.$equals(form)}}">Save</button> + + <hr/> + Debug View: + <pre>form={{form}} + master={{master}}</pre> + </div> + </doc:source> + <doc:scenario> + </doc:scenario> +</doc:example> + + +Things to notice + +Cancel & save buttons are only enabled if the form is dirty -- there is something to cancel or save. +Save button is only enabled if there are no validation errors on the form. +Cancel reverts the form changes back to original state. +Save updates the internal model of the form. +Debug view shows the two models. One presented to the user form and the other being the pristine copy master. |
