I spent some time playing with angular.js directives and try to understand what option you should not forget to make it works, this is detailing the result of these search.
Create a custom tag
An angular directive is a way to create your own html taglike this:
<google-photo></google-photo>
To declare a such tag, you will have to create a .directive in your controller. like this :
.directive('googlePhoto', function () {
return {
restrict: 'E',
scope: {
mytags: '=tags'
},
templateUrl: 'views/google-photo.html',
link: function(scope, element, attrs) {
console.log("I'm in !");
}
};
})
Here we have the following element :
- The directive name ‘googlePhoto’ is matching the tag name google-photo. This is a naming convention.
- restrict “E” indicates you want to create a new tag <name-of-the-directive>
- scope is linking the attribute “tags” to a local variable mytags
- templateUrl is a html file containing what will replace your tag
- link is the function to execute when the tag is built.
The templateUrl file will be like this :
<div>
-- {{ mytags.name }} --
</div>
The mytag variable will match the variable indicated in the main html file in the tags attribute like this :
<div class="google-photo" tags="myVariable"></div>
So this means the “$scope.myVariable” variable will be match to “mytag” in the tag you just created.
Customize an object
If you want to change a property of an element, apparently the more easiest way is to customize a standard element like a div using a directive:
.directive('googlePhoto', function (Google) {
return {
restrict: 'CA',
scope: {
mytags: '=tags'
},
templateUrl: 'views/google-photo.html',
link: function(scope, element, attrs) {
element.css({
'background': 'url(' + data.responseData.results[index].url + ') no-repeat'
});
}
};
})
Here we have:
- restrict ‘CA’ indicates you can use <div class=”google-photo”> or <div google-photo> in your html code to refer this directive.
Your template have not changed.
Now you html code looks like :
<div class="google-photo" tags="stags">Hello</div>
In your js code, element refers to this div and you can modify it.