149 votes

Angular.js : Comment $eval travail et pourquoi est-ce différent de vanille eval ?

J'étais curieux de connaître le $scope.$eval vous le voyez souvent dans les directives, alors j'ai vérifié la source et trouvé ce qui suit dans "rootScope.js":

  $eval: function(expr, locals) {
    return $parse(expr)(this, locals);
  },

"$parse" semble être définie par "ParseProvider" dans "parse.js", ce qui semble définir une sorte de mini-syntaxe qui lui est propre (le fichier est de 900 lignes de long).

Mes questions sont les suivantes:

  1. Qu'est-ce exactement $eval? Pourquoi est-il besoin de son propre mini-analyse de la langue?

  2. Pourquoi n'est-ce pas un bon vieux javascript "eval"?

184voto

Josh David Miller Points 66508

$eval et $parse ne pas évaluer JavaScript; ils évaluent AngularJS expressions. Liés à la documentation qui explique les différences entre les expressions et JavaScript.

Q: Quel est exactement $eval? Pourquoi est-il besoin de son propre mini-analyse de la langue?

À partir de la documentation:

Des Expressions JavaScript, comme des extraits de code qui sont généralement placés dans les liaisons comme {{ expression }}. Les Expressions sont traitées par $parse service.

C'est un JavaScript-mini-langage qui limite ce que vous pouvez exécuter (par exemple, pas de contrôle de flux consolidés, à l'exception de l'opérateur ternaire) ainsi que ajoute quelques AngularJS bonté (par exemple les filtres).

Q: Pourquoi n'est-ce pas un bon vieux javascript "eval"?

Parce que ce n'est pas vraiment de l'évaluation de JavaScript. Que les docs disent:

Si ... vous ne voulez pas exécuter de code JavaScript arbitraire, vous devriez en faire une méthode de contrôleur et d'appeler la méthode. Si vous voulez eval() angulaire de l'expression à partir de JavaScript, utiliser le $eval() la méthode.

Les docs lié ci-dessus ont beaucoup plus d'informations.

22voto

allenhwkim Points 6012

De l’essai,

On peut aussi passer des locaux pour l’expression d’évaluation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X