2013-07-02 13 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

धन्यवाद! मेरे उत्पादन कोड में, जब मैं 'स्कोप। $ घड़ी' का उपयोग करता हूं, तो यह एक त्रुटि देता है: 'TypeError: अपरिभाषित' संपत्ति 'exp' नहीं पढ़ सकता। जब मैं 'स्कोप। $ eval (attrs.completed)' का उपयोग करता हूं, तो यह 'अपरिभाषित' है। आखिरी समाधान काम कर रहा है जब मैं इसे '$ निरीक्षण' पैटर्न के अंदर रखता हूं। अंत में मैंने यह किया, लेकिन मुझे वास्तव में समझ में नहीं आता कि क्या हो रहा है और यह क्यों काम कर रहा है ... –

+0

ठीक है, @liviut टिप्पणी से SO लिंक इस व्यवहार को समझाने का एक अच्छा काम करता है। – Stewie

संबंधित मुद्दे