AngularJS: Extend $parse to use getter/setter
HTML
<script src="http://code.angularjs.org/0.10.6/angular-0.10.6.js"></script>
<div ng:app="my" ng:controller="Main">
<input type="text" ng:model="child">
</div>
JavaScript
angular.module('my', [], function($provide) {
// decorate - wrap $parse to understand jQuery text() getter/setter
$provide.decorator('$parse', function($delegate) {
return function(expression) {
var parsed = $delegate(expression);
// getter
var wrapper = function(scope, locals) {
var val = parsed(scope, locals);
return val && angular.isFunction(val.text) ? val.text() : val;
};
// setter
wrapper.assign = function(scope, value) {
var val = parsed(scope);
return val && angular.isFunction(val.text) ? val.text(value) : parsed.assign(scope, value);
};
return wrapper;
};
});
});
var Main = function() {
// some xml structure, reference on window for debugging
var xml = window.xml = $('<some><child></child><child-2></child-2></some>');
this.child = xml.find('child');
};