2013-05-23 15 views
9

Czy istnieje sposób na sprawdzenie wartości zmiany wyrażenia funkcji w dyrektywie AngularJS? Mam następujący kod HTML i JavaScript, a interpolacja {{editable()}} w szablonie pokazuje, że wartość jest równa true, podczas gdy sprawdzanie elementu HTML w Chrome pokazuje, że contenteditable ma wartość false.Oglądanie wartości funkcji w dyrektywie AngularJS

Wszelkie sugestie dotyczące sposobu, w jaki mogę obejrzeć wartość tej funkcji, zmieniają się i odpowiednio aktualizuję element attr? Czy istnieje lepszy sposób na osiągnięcie tego celu (nadal chciałbym ocenić funkcję)?

HTML:

<h4 editable="account.hasRole('ROLE_ADMIN')" 
       content="doc.heading"></h4> 

Javascript:

mod 
    .directive(
      'editable', 
      function() { 
       return { 
        restrict : 'A', 
        template : '<button class="btn pull-right"><i class="icon-pencil"></i></button>{{content}} ({{editable()}})', 
        scope : { 
         'content' : '=', 
         'editable' : '&' 
        }, 
        link : function(scope, element, attrs) { 
         scope.$watch('editable', function(newValue) { 
          element.attr('contenteditable', newValue()); 
         }); 
        } 
       }; 
      }); 

Odpowiedz

10

Spróbuj umieszczając zegarek na 'editable()' zamiast 'editable'

Objaśnienie: Powodem jest to potrzebne dlatego '&' wskazuje na dynamicznie generowane opakowanie funkcji dla atrybutu np raczej presja niż samo wyrażenie. Ta specjalna funkcja wrapper zwraca wartość account.hasRole('ROLE_ADMIN').

8

Chciałbym również wolą robić coś takiego:

scope.$watch(function() { 
    return scope.editable(); 
}, function (val) { 
    // ... 
}); 
Powiązane problemy