2013-07-02 27 views
10

在AngularJS中,我想測試一個指令內的布爾值,但是該值是以字符串形式返回的。在AngularJS中,爲什麼布爾參數被評估爲字符串?

下面是代碼:

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

我應該怎麼做纔能有指令內的typeof 「布爾」?

+2

插的屬性值總是字符串看到這個答案http://stackoverflow.com/a/12372494/527968 –

回答

10

使用$表,將評估對範圍內觀察到的特性表達:

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

,或者使用範圍$ EVAL:

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

DEMO PLUNKER

+0

謝謝!在我的生產代碼中,當我使用'scope。$ watch'時,它會返回一個錯誤:'TypeError:無法讀取未定義的屬性'exp'。當我使用'scope。$ eval(attrs.completed)'時,它是'undefined'。當我把它放在'$ observe'模式中時,最後的解決方案正在工作。最後,我做了這個,但我不明白髮生了什麼,爲什麼它正在工作...... –

+0

那麼,從@liviut評論的SO鏈接解釋這種行爲做了很好的工作。 – Stewie

相關問題