从angularjs $ parse获取typeof

时间:2018-11-20 10:09:34

标签: angularjs

因此,我了解$ parse从字符串创建函数,例如$ parse('name')将返回给定对象的name属性。我的问题是,它是否还能以某种方式返回所述属性的类型,例如:

var getType = $parse('typeof name');
var test = getType({name: 'Name1'}); //should be 'string'

2 个答案:

答案 0 :(得分:1)

检查此示例$ pase为您提供设置器/获取器选项。

然后使用typeofhttps://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代码,则应将其设置为控制器方法并从视图中调用该方法。