Angular.js: passing reference to directive
When first using the linking function on a directive I expected attribute values to be available through the attrs argument.
Turns out when you want to pass a reference from the parent scope you need to use the scope attribute in the directive definition object.
<pre ng-app="app" ng-controller="TestCtrl">
controller: <span ng-bind="user.username"></span>
directive: <span my-user="user"></span>
</pre>
var app = angular.module('app', []);
app.controller('TestCtrl', function($scope) {
$scope.user = { username: 'Ben' };
});
app.directive('myUser', function() {
return {
template:
'<span ng-bind="user.username"></span>',
scope: { user: '=myUser' },
link: function(scope, element, attrs) {
/*
* returns: 'user'
* attrs.myUser is just the string, you
* should use scope on the directive
* definition object
*/
console.log(attrs.myUser);
// returns: 'Ben'
console.log(scope.user.username);
}
};
});
Written by Ben van de Sande
Related protips
2 Responses
You have to assign the scope to accept an object by adding in your return object scope: { user: '=myUser'
}
default seems to only accept strings.
over 1 year ago
·
How can i pass this to a function in angularjs. I have multiple select objects with the same ng-model. i want to pass the selected element to the ng-change function when an element is selcted from the list
over 1 year ago
·
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Angularjs
Authors
Related Tags
#angularjs
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#