2013-07-02 8 views
10

In AngularJS Vorrei testare un valore booleano all'interno di una direttiva, ma il valore viene restituito come una stringa.In AngularJS, perché un parametro booleano viene valutato come una stringa?

Ecco il codice:

angular.module('TestApp', ['TestApp.services', 'TestApp.controllers', 'TestApp.directives']); 

angular.module('TestApp.services', ['ngResource']). 
    factory('Obj', function($resource){ 
     return $resource('datas.json'); 
    }); 

angular.module('TestApp.controllers', []). 
    controller('TestCtrl', ['$scope', 'Obj', function($scope, Obj) { 
     $scope.objs = Obj.query(); 
    }]); 

angular.module('TestApp.directives', []). 
    directive('requiredStatus', function() { 
     return function(scope, elm, attrs) { 
      attrs.$observe('v', function(av) { 
       if (attrs.completed) { 
       scope.val= true; 
       } else { 
        scope.val= false; 
       } 
      scope.type = typeof attrs.completed; 
      }); 
     }; 
    }); 

http://plnkr.co/edit/DvIvySFRCYaz4SddEvJk

Cosa devo fare per avere un typeof "booleano" all'interno della direttiva?

+2

valori degli attributi interpolati sono sono sempre archi vedi questa risposta http://stackoverflow.com/a/12372494/527968 –

risposta

10

Usa $ orologio, che valuterà l'espressione di attributo osservato contro il campo di applicazione:

scope.$watch(attrs.completed, function(completed) { 
    scope.val = completed; 
    scope.type = typeof completed; 
}); 

o utilizzare la portata $ eval:.

scope.val = scope.$eval(attrs.completed); 
scope.type = typeof scope.val; 

DEMO PLUNKER

+0

grazie! nel mio codice di produzione, quando uso 'scope. $ watch', restituisce un errore:' TypeError: Impossibile leggere la proprietà 'exp' di undefined'. quando uso 'scope. $ eval (attrs.completed)', è 'undefined'. L'ultima soluzione funziona quando la inserisco nel pattern '$ observ'. Finalmente l'ho fatto, ma non capisco cosa sta succedendo e perché funziona ... –

+0

Bene, il link SO del commento @liviut è un ottimo lavoro per spiegare questo comportamento. – Stewie

Problemi correlati