2013-07-17 15 views
6

Mam prosty AngularJS directive with a templateUrl. Dyrektywa dotyczy etykiety narzędzi.Utwórz dyrektywę AngularJS, która nie jest natychmiast wyświetlana?

  • Obecnie dołączam ukryty element. Jednak dyrektywa jest używana bardzo często, więc setki danych pojawiają się, a strona zwalnia aż do momentu, w którym staje się bezużyteczna.
  • Chciałbym tylko załadować szablon i dołączyć elementy po kliknięciu myszką.

Reading the angular docs, there doesn't seem to be any way of making a directive delay rendering. Czy czegoś brakuje?

// Tooltip directive 
    return function(){ 
     return { 
        templateUrl: 'someTemplate.html', 
        replace: false, // Append our tooltip, rather than replace the element's contents. 
      link: function (scope, element, attrs) { 
       $element.on({ 
         mouseenter: function() { 
          // Would like to render, and set up bindings, here (my question) 
        }, 
         mouseleave: function() { 
          // Destroy rendered element here (simple stuff, not my question) 
        } 
       }); 
      } 
     } 
    } 

Odpowiedz

1

wierzę, masz zamiar trzeba wstrzyknąć usługę $compile zrobić coś podobnego wewnątrz callback:

templateMarkup = '<p> {{ property }} </p>'; 
$compile(templateMarkup)(scope); 

nie myślałem poprzez dokładne kroki, aby dopasować ten w twoim kodzie, ale daj mi znać, czy byłoby to pomocne.

+0

Dzięki za odpowiedź! Zastanowiłem się nad kompilacją $, a to rozwiąże drugi problem, w jaki sposób renderować popup na żądanie, ale jak mogę zapobiec natychmiastowemu renderowaniu Angulara? – mikemaccana

+2

Krótko mówiąc, nie zadeklaruj szablonu dla swojej dyrektywy. Jeśli to zrobisz, Angular przejmie kontrolę nad tym, kiedy zostanie skompilowany z dala od ciebie (i skompiluje go z góry). Alternatywnie można dodać znacznik jako wartość modułu 'angular.module ('myApp', []). Value ('popupMarkup', '

{{property}}

');' i wprowadzić go w funkcję łączenia. Lub możesz po prostu zadeklarować ten znacznik jako zmienną String w twojej dyrektywie, jeśli nie chcesz się zbytnio ochotę. – tnunamak

Powiązane problemy