2016-04-18 18 views
0

Wie kann ich eine Überwachung auf Umfang Variable, die ein Objekt und Objekt haben eine Eigenschaft, die HTML-Layout mit Inhalt editierbare div haben. Wenn ich contenteditable Div eintippe, gibt es ein aktualisiertes Layout zurück.Beobachten Sie ein DOM-Objekt des Bereichs in Link-Methode der Richtlinie

Hier ist mein Umfang Variable, die zwei Wege aus der Richtlinie binded sind ->

this.scope = { 
    section : '=' 
}; 

Und dieser Abschnitt hat Objekt wie:

this.sections = [ 
    { 
    'title' : 'Untitle Section New', 
    'type' : 'customSection', 
    'layout': '<div class="content-editable" contenteditable="true" style="width: 100%;height: 100%;-webkit-column-gap: 20px;-webkit-column-count:2;-webkit-column-rule: 1px solid red;background-color: #eeeeee;outline: none; position: relative; "><p>This is test.</p></div>' 
    } 
] 

Und hier ist html, wo ich diese Abschnitte in der Richtlinie wiederholen :

<book-section data-ng-repeat="section in book.sections" 
     section="section" 
     data-ng-show="digitalBook.activeSection === section.index"> 
</book-section> 

Jetzt möchte ich eine Uhr auf jeden Abschnitt anwenden. Wenn der editierbare Div-Inhalt aktualisiert wird, möchte ich einen aktualisierten HTML-Code von dom erhalten. Was ist der perfekte Weg, um dies mit einer guten Leistung durchzuführen?

+0

sind Sie für die 'contenteditable' div ein 3rd-Party-Plugin/Modul? –

+0

Nein, es ist einfach HTML-Eigenschaft contenteditable @AhmedWagdi –

+0

Könnten Sie den Code, den Sie derzeit für die Buch-Abschnitt-Richtlinie haben, veröffentlichen? –

Antwort

0
$scope.$watch('scope variable', function() { 
    // do something here 
}, true); 

Siehe http://docs.angularjs.org/api/ng. $ RootScope.Scope # $ beobachten

die third argument as true Pass auf alle Eigenschaften zu beobachten. Ja, es hat Performance-Bedenken, aber Ihr Fall ist eine tiefe Uhr.

Sie können $watchCollection verwenden, dies wird nur die erste Ebene Ihrer array oder object überwachen.

scope.$watchCollection('scope variable', function (newVal, oldVal) {//do something here}); 

See https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope # $ watchCollection

+0

Ich habe es versucht, es funktioniert nicht. In Link-Methode angehängt ich Layout in Direktive html wie: - ctrl.sectionElement = $ ('. Abschnitt', Element) [0]; ctrl.sectionElement.innerHTML = scope.section.layout; .. nach dem Anhängen von HTML tippe ich in den Inhalt editierbare div. Zu dieser Zeit funktioniert es nicht. @Thalaivar –

+0

Sie hängen HTML an Ihre Dom, danach was passieren soll? können Sie klarer sein – Thalaivar

+0

eigentlich ich Wana ein Thumbnail für die Seite erstellen. Also brauche ich aktualisierten HTML in Miniaturansicht. Also möchte ich das Layout-Objekt betrachten und wenn es sich ändert, wird es auf das Thumbnail reflektiert. @Thalaivar –