As of Angular 1.3 there is ngModelOptions directive that allows to achive the same behaviour natively.
<form name="userForm">
<input type="text" ng-model="user.name" ng-model-options="{ updateOn: 'submit' }" name="userName">
<button type="submit">save</button>
<button type="button" ng-click="userForm.userName.$rollbackViewValue();">cancel</button>
</form>
JSFiddle: http://jsfiddle.net/8btk5/104/