2015-03-05 14 views
5

Ho una casella di testo con tutti i controlli di stile.

Quando inserisco un nuovo testo, salva.

Quando si apportano modifiche al contenuto (testo) insieme ad alcuni stili come l'evidenziazione del colore e il testo in grassetto - salva il testo e gli stili modificati.

Tuttavia, quando eseguo solo modifiche di stile senza modifiche del contenuto, non salverà quelle modifiche di stile.

Sto usando $ watch per confrontare nuovo valore e vecchio valore.

Come farlo funzionare anche per cambi di stile?

+1

Puoi allegare il tuo codice per favore? – mmmmmpie

risposta

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 
       } 
      } 

     } 
    }; 

}]); 

nel codice HTML:

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

Nel caso in cui si desidera eseguire funzioni personalizzate al di fuori della direttiva:

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

Nel codice direttiva fanno di questo cambiamento:

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

Questo approccio non funziona per il mio caso. Ho il modulo a schede Bootstrap, e sto guardando l'attributo di stile 'display' dell'ultima scheda che ha una tela. Se il valore di 'display' cambia da 'none' a 'block', allora voglio attivare l'evento resize per ridisegnare la tela che vive all'interno di questa scheda. Penso di aver bisogno di chiamare $ scope. $ Digest() per farlo funzionare, ma non so come. Sto usando la direttiva personalizzata per controllare l'ultima scheda e guardare l'attributo css della visualizzazione. Durante il debug posso vedere quell'orologio ma sembra che funzioni troppo presto e non funzioni tutte le volte. – tarekahf

Problemi correlati