Proszę mi pomóc, w jaki sposób możemy sprawić, że AngularJS skompiluje kod wygenerowany przez dyrektywę?Jak zmusić AngularJS do kompilacji kodu wygenerowanego przez dyrektywę?
Można nawet znaleźć ten sam kod tutaj http://jsbin.com/obuqip/4/edit
HTML
<div ng-controller="myController">
{{names[0]}} {{names[1]}}
<br/> <hello-world my-username="names[0]"></hello-world>
<br/> <hello-world my-username="names[1]"></hello-world>
<br/><button ng-click="clicked()">Click Me</button>
</div>
JavaScript
var components= angular.module('components', []);
components.controller("myController",
function ($scope) {
var counter = 1;
$scope.names = ["Number0","lorem","Epsum"];
$scope.clicked = function() {
$scope.names[0] = "Number" + counter++;
};
}
);
// **Here is the directive code**
components.directive('helloWorld', function() {
var directiveObj = {
link:function(scope, element, attrs) {
var strTemplate, strUserT = attrs.myUsername || "";
console.log(strUserT);
if(strUserT) {
strTemplate = "<DIV> Hello" + "{{" + strUserT +"}} </DIV>" ;
} else {
strTemplate = "<DIV>Sorry, No user to greet!</DIV>" ;
}
element.replaceWith(strTemplate);
},
restrict: 'E'
};
return directiveObj;
});
To jest świetny kawałek kodu! – SunnyShah
Czy wiązanie "=" nie byłoby bardziej odpowiednie? http://jsfiddle.net/979mN/1/ –
@Liviu, ponieważ dyrektywa nie zmienia wartości myUsername, jednokierunkowe wiązanie danych ("@") wydaje się bardziej odpowiednie niż dwukierunkowe wiązanie danych ("="). Chociaż używanie '=' jest łatwiejsze (nie trzeba używać {{}} w HTML), użycie '@' wyjaśnia, że dyrektywa nie musi modyfikować wartości. –