получение typeof из angularjs $ parse - PullRequest
0 голосов
/ 20 ноября 2018

Итак, я понимаю, что $ parse создает функцию из строки, например, $ parse ('name') возвращает свойство name из данного объекта.Мой вопрос: может ли он как-то также вернуть тип указанного свойства, например:

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

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Служба $ parse не оценивает оператор JavaScript typeof.Если вы хотите использовать typeof в выражении AngularJS, создайте функцию 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 - выражения AngularJS и выражения JavaScript .

Если вы хотите запустить более сложный код JavaScript, вы должны сделать его методом контроллера и вызывать метод из своего представления.

0 голосов
/ 20 ноября 2018

Посмотрите в этом примере $ 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...