I'm writing my first directive in angular- it's essentially just a wrapper on the freebase search widget written in jquery.
I want to make the directive application independent (with the only dependencies being external css and jquery).
Here is a plunkr of the directive as it is now.
And the directive itself:
directive('suggest', function() {
return {
restrict: 'E',
template: "<input type='text'>",
replace:true,
link: function(scope, element, attrs) {
var language = 'en'; //set english as default language
if (attrs.lang){
language = attrs.lang;
attrs.$observe('lang', function(value) {
console.log("lang val " + value);
language = value;
});
}
$(element).suggest({
"lang": language
})
.bind("fb-select", function(e, data) {
console.log(data);
});
}
};
});
When the user selects an item from the dropdown menu, the following function runs:
.bind("fb-select", function(e, data) {
console.log(data);
});
What is the best practice for feeding the data from the selection to the application thats using it?
The most angular way would be to achieve this using data binding (2 way) in an isolated scope:
restrict: 'E',
template: "<input type='text'>",
replace:true,
scope:{
myModel:'='
},
link: function(scope, element, attrs) {
............
and inside that select function:
.bind("fb-select", function(e, data) {
console.log(data);
scope.myModel=data;
});
usage:
<suggest my-model="someModel" .... />
and in your controller $scope:
$scope.someModel="";
You still need to handle the initial binding for that pre-selected model in your directive though, but yea, the cleanest way is 2 way data binding through an isolate scope.
EDIT
These 2 articles are excellent for helping port jquery plugins to angular:
http://rogerz.github.io/blog/2013/09/27/jQuery-to-angularjs/
http://henriquat.re/directives/advanced-directives-combining-angular-with-existing-components-and-jquery/angularAndJquery.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With