因此,我了解$ parse从字符串创建函数,例如$ parse('name')将返回给定对象的name属性。我的问题是,它是否还能以某种方式返回所述属性的类型,例如:
var getType = $parse('typeof name');
var test = getType({name: 'Name1'}); //should be 'string'
答案 0 :(得分:1)
检查此示例$ pase为您提供设置器/获取器选项。
然后使用typeof
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof)来知道吸气剂使用的值是什么类型。
在这种情况下,使用吸气剂会得到一个字符串。
var Controller = function($parse) {
var vm = this
var getter = $parse('user.name')
var setter = getter.assign
var context = {
user: {
name: 'AngularJS'
}
};
setter(context, 'newValue')
var test = getter(context)
if (typeof test == "boolean") {
console.log("boolean logic")
} else if (typeof test == "string") {
console.log("string logic")
} else if (typeof test == "number") {
console.log("number logic")
} else if (typeof test == "undefined") {
console.log("undefined logic")
}
// IT is a string
vm.test = "typeof= " + typeof test
};
Controller.$inject = ['$parse']
angular
.module('app', [])
.controller('Controller', Controller);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="Controller as vm">
{{vm.test}}
</div>
答案 1 :(得分:1)
$parse service不评估JavaScript typeof
运算符。如果您想在AngularJS表达式中使用typeof
,请创建一个typeof
函数并将其添加到范围。
angular.module("app",[])
.run(function($parse) {
var getType = $parse("typeof(name)");
var typeofFn = x => typeof x;
var test = getType({name: "Name1", typeof: typeofFn});
console.log(test); //prints "string"
})
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app="app">
</body>
关于可解析表达式的限制,请阅读AngularJS Developer Guide - AngularJS Expressions vs. JavaScript Expressions。
如果要运行更复杂的JavaScript代码,则应将其设置为控制器方法并从视图中调用该方法。