I have been trying to define directives so I can display different "widgets" in a form, depending on the type of field and its parameters, which are stored in a database. I need to react to different types of scenarios, hence the need for directives to handle layout.
While playing with a few examples, I came up with a code that *kinda* works:
HTML
<input type="text" ng-model="myModel" style="width: 90%"/>
<div class="zippy" zippy-title="myModel"></div>
Directive
myApp.directive('zippy', function(){
return {
restrict: 'C',
// This HTML will replace the zippy directive.
transclude: true,
scope: { title:'=zippyTitle' },
template: '<input type="text" value="{{title}}"style="width: 90%"/>',
// The linking function will add behavior to the template
link: function(scope, element, attrs) {
// Title element
element.bind('blur keyup change', function() {
scope.$apply(read);
});
var input = element.children();
function read() {
scope.title = input.val();
}
}
}
});
This seems to works (albeit noticeably slower than a *proper* angularJS variable binding) but I figure there must be a better way to do this. Can anyone shed some light on the matter?
blurandchange? Isn't that redundant? If not, I'd be curious to know what the difference is from just usingkeyup blur.blurandchangeare different, but I believe for practical purposes,keyupandchangeare functionally similar. The only diference would be that if I changed the input's value programmatically, usingchangewould trigger an event (the input's data changing), whereas leavingchangeout would make such a change invisible, unless it came from a keystroke. Bear in mind this was "ages" ago, I had no idea what I was doing with the awesome beast that is angularJS ;)