2015-03-05 15 views
5

Mam bogate pole tekstowe ze wszystkimi kontrolkami stylu.

Po wprowadzeniu nowego tekstu - zapisuje.

Po wprowadzeniu zmian w treści (tekstu) wraz z niektórymi stylami, takimi jak wyróżnianie kolorów i pogrubiony tekst, zapisuje zmieniony tekst i style.

Ale gdy wprowadzam zmiany w stylu bez zmiany zawartości - nie zachowam zmian stylu.

Używam zegarka $, aby porównać nową wartość ze starą wartością.

Jak to działa, nawet w przypadku zmian stylu?

+1

Czy możesz dołączyć swój kod, proszę? – mmmmmpie

Odpowiedz

10
angular.module("app",[]).directive('spyStyle', [function() { 

    return { 

     link: function (scope, element, attrs) { 

      scope.$watch(function() { 
       return element.css(attrs['spyAttribute']); 
      }, styleChangedCallBack, 
      true); 

      function styleChangedCallBack(newValue, oldValue) { 
       if (newValue !== oldValue) { 
        // do something interesting here 
       } 
      } 

     } 
    }; 

}]); 

w HTML:

<div spy-style spy-attribute="height" > 

W przypadku, gdy chcesz wykonywać funkcje niestandardowe poza dyrektywy:

<div spy-style="functionNameToExecute" spy-attribute="height" > 

W kodzie Dyrektywa dokonać tej zmiany:

angular.module("app",[]).directive('spyStyle', [function() { 

    return { 

     link: function (scope, element, attrs) { 

      scope.$watch(function() { 
       return element.css(attrs['spyAttribute']); 
      }, styleChangedCallBack, 
      true); 

      function styleChangedCallBack(newValue, oldValue) { 
       if (newValue !== oldValue) { 
        // do something interesting here 
        // invoking callback function: 
        scope[attrs['spyStyle']](newValue); 
       } 
      } 

     } 
    }; 

}]); 
+0

To podejście nie działa w moim przypadku. Mam formularz tabulacji Bootstrap i oglądam atrybut stylu "wyświetl" ostatniej zakładki z płótnem. Jeśli wartość "display" zmienia się z "none" na "block", to chcę wywołać zdarzenie resize, aby przerysować płótno żyjące w tej zakładce. Myślę, że muszę wywołać $ scope. $ Digest(), aby działał, ale nie wiem jak. Używam dyrektywy niestandardowej do kontrolowania ostatniej karty i obserwowania atrybutu css wyświetlania. Podczas debugowania widzę ten zegarek, ale wygląda na to, że działa zbyt wcześnie i nie działa przez cały czas. – tarekahf

Powiązane problemy