2013-05-25 10 views
29

Ich verwende AngularJS und Foundation.AngularJS: ZUB Foundation JS initialisieren

Foundation JS initialisieren, müssen Sie den folgenden Anruf:

$(document).foundation(); 

Was wäre der beste Weg sein, diesen Aufruf in einer AngularJS Anwendung zu machen? Codebeispiele würden geschätzt werden.

Wenn ich eine Anweisung für eine Foundation JS-Komponente schreiben würde, wie kann ich sicherstellen, dass Foundation initialisiert wird?

+2

Ich bin mir nicht sicher, ob dies von Nutzen zu Ihnen ist, aber es gibt eine AngularJS Port eines Bündels jetzt javascript Teile der Stiftung: pineconellc.github.io/angular-foundation/ –

Antwort

15

Sie könnten $apply den Code, um es in das Angular-Framework zu bringen. Hier ist ein Beispiel unter Verwendung von $rootScope mit run und dies auch in einem Controller/directive mit jedem $scope getan werden könnte:

app.run(function($rootScope){ 
    $rootScope.$apply($(document).foundation()); 
}); 

Eine weitere Option ::

$compile($(document).foundation())($scope); 

unbedingt den $compile Service enthält in Ihrem Controller/Direktive, um es auf diese Weise zu verwenden. ZB:

app.directive('mydirective', function($compile) { 
    return { 
     link: function(scope, element, attrs) { 
      $compile($(document).foundation())(scope); 
     } 
    } 
}); 
+1

die Verwendung von Codebeispiel oben mit run scheint nicht zu funktionieren. Ich bestätige, dass $ compile in einem Controller verwendet wird, um Foundation zu initialisieren, und einfach '$ (document) .foundation();' –

+0

Cool, das ist, was ich gesucht habe, mit Foundation-6 – pkrawat1

38

Hier ist mein nehmen, in app.js:

.run(function($rootScope) { 
    $rootScope.$on('$viewContentLoaded', function() { 
     $(document).foundation(); 
    }); 
}); 

die Stiftung neu initialisieren, wenn eine neue Ansicht geladen wird (so dass die in der neuen Ansicht enthaltenen Komponenten werden auch initialisiert) . Auf diese Weise müssen sich Ihre Controller nicht bewusst sein.

+0

Das funktionierte für mich! Ich danke dir sehr! – aug

+0

Was ist mit der in dieser Antwort aufgeworfenen Sorge? http://StackOverflow.com/Questions/19623078/initializing-Zur-Foundations-Tooltip-with-angularjs – HaveAGuess

2

Versuchen Sie, den folgenden Code:

app.run(function($timeout){ 
    $timeout(function() { 
     $(document).foundation(); 
    }, 500); 
}); 

Es ist mein Problem gelöst versucht Foundation zu erhalten offenbaren arbeiten.

3

Eine Methode, die ich verwendet habe, ist nur ein <script> Tag am Ende meiner Teil/Vorlage enthalten.

Auf diese Weise kann ich Ziel nur den neuen Inhalt von jedem Teil - statt Fundament js das gesamte DOM neu zu parsen.

zum Beispiel in meinem header.html:

<header id="app-header"> 
    <h1>Logo</h1> 
    <dl class="accordion" data-accordion> 
    <dd> 
     <a href="#panel1">Panel 1</a> 
     <div id="panel1" class="content"> 
     Loren Ipsum blah blah blah.... 
     </div> 
    </dd> 
    </dl> 
</header> 

<!-- add this tag on bottom of template/partial --> 
<script>$('#app-header').foundation();</script> 

Vor allem, wenn Sie Ihre App eine Menge DOM-Elemente auf der Seite hat, kann diese perfomance erheblich verbessern.

+0

gewährt, möchten Sie in der Regel vermeiden, Ihre DOM mit '

4

Es gibt eine native angularJs-Unterstützung für das Fundament. Schauen Sie sich Angular Foundation an.

Angular Foundation ist ein Hafen des ausgezeichneten Winkel Bootstrap-Projektes AngularUI Teams für den Einsatz im Rahmen Foundation.

Es hat keine Abhängigkeiten, aber eckige Bibliothek selbst und Foundation CSS nur.

+0

Ich habe nur "Bower" installiert "eckig-Stiftung" und scheint richtig zu funktionieren. – Webdevotion

+0

Diese Bibliothek initialisiert die JavaScript-Komponenten nicht standardmäßig (ich bin auf v0.3.1 - 2014-08-19) –

+0

Sie haben Recht, es tut es nicht. Stattdessen können Sie fast alle Foundation-Javascript-Plugins nutzen. –

0

Für Typoskript Angular 4 (oder 2) Projekte mit Komponenten: $ als Variable in der Komponente

Laut der Blog-Post gegeben, erklären und dann rufen $(document).foundation(); in ngOnInit() für mich gearbeitet!

Mit Angular werden Komponenten in das DOM injiziert, nachdem Foundation geladen wurde. Wenn Sie eine neue Komponente laden und injizieren, weiß Foundation nicht, dass es da ist. Wir müssen Foundation zu initialisieren und erneut binden, damit diese Attribute verdrahtet werden. http://justindavis.co/2017/06/15/using-foundation-6-in-angular-4/

{ import Component } from '@angular/core'; 

declare let $: any;  // TO ACCESS JQUERY '$' FUNCTION 

@Component({ 
    selector: 'my-component', 
    templateUrl: './my-component.html' 
    // other stuff here 
}); 

export class MyComponent implements OnInit { 
    constructor() {} 

    ngOnInit() { 
    $(document).foundation(); // CALL foundation() INITIALIZATION FUNCTION FROM HERE 
    } 
} 
Verwandte Themen