2016-03-08 4 views
7

की गुंजाइश पर सरल बूलियन को परिभाषित करते हैं:कोणीय अभिव्यक्ति में एक प्रकार का स्कोप चर कैसे प्राप्त करें?

var mymodal = angular.module('mymodal', []); 

mymodal.controller('MainCtrl', function ($scope) { 
    $scope.b = false; 
}); 

मैं अभिव्यक्ति में एक चर के प्रकार के कैसे मिल सकता है? typeOf और Object.prototype.Tostring.call काम नहीं करते हैं। http://jsfiddle.net/g8Ld80x3/2/

उत्तर

10

मुझे लगता है कि सबसे अच्छा तरीका है एक कस्टम फ़िल्टर बनाने और उसका उपयोग क्या आप अभिव्यक्ति के भीतर इच्छा के रूप में, आप जाँच कर सकते हैं this लिंक है कि के लिए वस्तु पाने के उपयोग करने के लिए है।एक वस्तु

अपने मामले के लिए की चाबी आप

angular.module('customfilter', []).filter('typeof', function() { 
    return function(obj) { 
    return typeof obj 
    }; 
}); 
+0

महान विचार! सरल और मजबूत। मुझें यह पसंद है। – Landeeyo

+0

यह कोणीय में क्यों नहीं बनाया गया है? हो सकता है कि यह पहले से ही कोणीय 2 में है। Http://stackoverflow.com/questions/37511055/how-to-check-type-of-variable-in-ngif-in-angular2 हालांकि ऐसा नहीं लगता है। –

1

(मैं के रूप में आप क्या करना चाहते नहीं लगता कि अभिव्यक्ति में सीधे संभव है) नियंत्रक में कुछ इस तरह का प्रयास करें::

<div ng-controller="MainCtrl" class="container"> 
     <div> 
      {{ b }} 
      {{ typeOf(b) }} 
      {{ Object.prototype.toString.call(b) }} 
     </div> 
</div> 

यहाँ JSFiddle है

var mymodal = angular.module('mymodal', []); 
 

 
mymodal.controller('MainCtrl', function ($scope) { 
 
    $scope.b = false; 
 
    $scope.getBType = function(test){ 
 
     return(typeof test); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app='mymodal' ng-controller="MainCtrl" class="container"> 
 
     <div> 
 
      {{ getBType(b) }} 
 
     </div> 
 
</div>

+0

मैं इसे नियंत्रक में नहीं करना चाहता हूं। मैं अभिव्यक्ति में टाइपफूफ निष्पादित करना चाहता हूं। इसके अलावा 'ng-if' या' ng-show'/'ng-hide' निर्देशों में भी। – Landeeyo

+0

सबसे पहले, आपको इसे नियंत्रक में करना होगा, फिर आप इसे अभिव्यक्ति में वापस कर दें। – Ionut

+0

क्या यह चेतावनी कॉल करने की बजाय स्ट्रिंग वापस नहीं करना चाहिए? – Landeeyo

4

आप इसे नहीं कर सकते हैं और अच्छे कारण के लिए: Angular expression पार्सर इस तरह के वें को अस्वीकार करता है टेम्पलेट्स में ings।

तुम सच में ऐसा करने में सक्षम होना चाहते हैं, मैं स्पष्ट रूप से $rootScope पर सहायक तरीकों सेट करने के लिए सलाह देते हैं, तो यह आपके सभी टेम्पलेट्स में उपलब्ध हो जाएगा:

mymodal.run(function($rootScope) { 
    $rootScope.typeOf = function(value) { 
     return typeof value; 
    }; 
}); 

तुम भी कोणीय खुद उपयोगिता तरीकों संदर्भित कर सकते हैं :

mymodal.run(function($rootScope) { 
    ['isArray', 'isDate', 'isDefined', 'isFunction', 'isNumber', 'isObject', 'isString', 'isUndefined'].forEach(function(name) { 
     $rootScope[name] = angular[name]; 
    }); 
}); 

और टेम्पलेट्स में {{ isArray(arr) }} का उपयोग करें।

+0

यह बहुत अच्छा जवाब है और आपको बहुत धन्यवाद। लेकिन फ़िल्टर बनाने के लिए जाम्बनी का विचार मुझे बेहतर है। वैसे भी - धन्यवाद फिर से। – Landeeyo

+0

वास्तव में, कम से कम 2 कारणों से, इस मामले में फ़िल्टर बहुत बुरा विचार है, लेकिन जो भी आपके लिए बेहतर है। – dfsq

+0

नुकसान क्या हैं? – Landeeyo

0

जैसा कि आप विशिष्ट मान के typeof प्रकार तक पहुंचने का प्रयास कर रहे हैं और वर्तमान कोड में आप इसे view में कर रहे हैं जो इस तरह के ऑपरेशन के लिए काफी देर हो चुकी है।

इसके बजाय आप नियंत्रक के दायरे में एक समारोह कर सकते हैं और बस वहाँ से लौट:

var mymodal = angular.module('mymodal', []); 
 

 
mymodal.controller('MainCtrl', function ($scope) { 
 
    $scope.b = false; 
 
    $scope.getTypeof = function(it){ return typeof(it); }; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app='mymodal' ng-controller="MainCtrl" class="container"> 
 
     <div> 
 
      {{ b }} : {{ getTypeof(b) }} 
 
      
 
     </div> 
 
</div>

0

एचटीएमएल

<div ng-controller="MainCtrl" class="container"> 
     <div> 
      {{ b }}<br> 
      {{ typeOf(b) }}<br> 
     </div> 
</div> 

जे एस

var mymodal = angular.module('mymodal', []); 

mymodal.controller('MainCtrl', function ($scope) { 
    $scope.b = false; 
    $scope.typeOf = function (v){ return (typeof v)}; 
}); 

परिणाम

false 
boolean 
2

बस दिखाने के लिए Zamboney के जवाब मेरे नमूना कोड के लिए लागू उपयोग कर सकते हैं:

नियंत्रक:

angular.module('customfilter', []).filter('getType', function() { 
    return function(obj) { 
    return typeof obj 
    }; 
}); 

var mymodal = angular.module('mymodal', ['customfilter']); 

mymodal.controller('MainCtrl', function ($scope) { 
    $scope.b = false; 
}); 

दृश्य:

<div ng-controller="MainCtrl" class="container"> 
    <div> 
    {{ b }} 
    {{ b | getType }} 
    <div ng-if="(b | getType) == 'number'"> 
     It's a number 
    </div> 
    <div ng-if="(b | getType) == 'boolean'"> 
     It's a boolean 
    </div> 
    </div> 
</div> 

और बेला: http://jsfiddle.net/g8Ld80x3/5/

0
$scope.b = new String('name'); 

// ऊपर बयान के अनुसार, वस्तु typeof ऑपरेटर का परिणाम हो जाएगा। यह टाइपफ़ो ऑपरेटर के प्रकार की जांच नहीं करता है: http://bonsaiden.github.io/JavaScript-Garden/#types.typeof

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