Zuerst würde ich Ihre Angular App und Direktive nicht mit dem gleichen Namen benennen. Es ist nicht nur verwirrend, aber es funktioniert möglicherweise nicht richtig. Zweitens, obwohl es viele Möglichkeiten, kann dies zu nähern, ist hier, wie ich es tun würde:
Richtlinie
(Ich habe die Richtlinie auf ein Attribut eher als ein Element geändert und verwendet ein Isolat Rahmen für die Attribute . die Link-Funktion ist in einem $timeout
umwickelt das Element besteht in dem DOM vor dem Versuch, tagcanvas
zu nennen.)
.directive("tagCanvas", function($timeout) {
return {
restrict: "A",
scope: {
canvasId: "@",
outlineColour: "@",
reverse: "@",
depth: "@",
maxSpeed: "@",
textFont: "@",
textColour: "@",
weightMode: "@",
weight: "@"
},
link: function (scope, element) {
$timeout(function() {
element.tagcanvas({
outlineColour: scope.outlineColour,
reverse: scope.reverse,
depth: scope.depth,
maxSpeed: scope.maxSpeed,
textFont: scope.textFont,
weightMode: scope.weightMode,
weight: scope.weight
}, scope.canvasId);
});
}
};
})
Controller
(Sie mögen Ihr Wort wahrscheinlich bekommen würden, um sicherzustellen, Liste von einem Dienst oder einem anderen Speicher, aber zur Veranschaulichung habe ich ein Array in der Steuerung)
.controller("ctrl", function ($scope) {
$scope.wordList = [
{
href: "#",
fontSize: "2.83ex",
text: "1000"
}, {
href: "#",
fontSize: "4.8ex",
text: "example"
}, {
href: "#",
fontSize: "8.77ex",
text: "gif"
}, {
href: "#",
fontSize: "2.83ex",
text: "svg"
}, {
href: "#",
fontSize: "8.77ex",
text: "jpg"
}, {
href: "#",
fontSize: "10.68ex",
text: "png"
}, {
href: "#",
fontSize: "2.83ex",
text: "bmp"
}, {
href: "#",
fontSize: "4.8ex",
text: "img"
}
];
})
html
<div>
<canvas width="300"
height="300"
id="myCanvas"
tag-canvas
canvas-id="tags"
outline-colour="#ff00ff"
text-font="Arial"
text-colour="#ff00ff"
reverse="true"
depth="0.8"
max-speed="0.05"
weight-mode="both"
weight="true"></canvas>
</div>
<div id="tags" style="font-size: 50%;">
<a ng-repeat="word in wordList" href="{{word.href}}" style="font-size: {{word.fontSize}}">{{word.text}}</a>
</div>
Ich habe eine Fehlermeldung, dass 'Tagcanvas' Funktion ist keine Funktion, obwohl ich sicher, dass die jquery.tagcanvas hinzufügen.js und tagcanvas.js:/ – Hana
Sie müssen etwas falsch referenziert haben. Hier ist ein [funktionierender Plunker] (http://plnkr.co/edit/4DR5FjttC2CP0KkDcwaW?p=preview) mit dem genauen Code aus meiner Antwort. – Lex
Ich habe ein Problem mit dem Controller. Ich habe nicht verstanden, wo ich es erklären soll. Weil ich ein Modul namens starter.Clients mit einem Controller namens clientsController habe, und dort möchte ich die tagCloud (clients.html) verwenden. Also muss ich den "ctrl" -Controller aufrufen, als Sie in clientsController erstellt haben? :/Ich bin ziemlich verwirrt. – Hana