3 回答

TA貢獻1865條經驗 獲得超7個贊
$eval而且$parse不要評估JavaScript;他們評估AngularJS 表達式。鏈接的文檔解釋了表達式和JavaScript之間的區別。
問:$ eval到底在做什么?為什么需要自己的小型解析語言?
從文檔:
表達式是類似于JavaScript的代碼段,通常放置在諸如{{expression}}之類的綁定中。表達式由$ parse服務處理。
這是一種類似于JavaScript的迷你語言,它限制了您可以運行的內容(例如,除了三元運算符之外,沒有控制流語句),并且增加了一些AngularJS的優點(例如,過濾器)。
問:為什么不使用普通的舊javascript“ eval”?
因為它實際上不是在評估JavaScript。正如文檔所說:
如果您確實想運行任意JavaScript代碼,則應將其設為控制器方法并調用該方法。如果要從JavaScript評估角度表達式,請使用$ eval()方法。
上面鏈接的文檔有更多信息。

TA貢獻1868條經驗 獲得超4個贊
從測試來看
it('should allow passing locals to the expression', inject(function($rootScope) {
expect($rootScope.$eval('a+1', {a: 2})).toBe(3);
$rootScope.$eval(function(scope, locals) {
scope.c = locals.b + 4;
}, {b: 3});
expect($rootScope.c).toBe(7);
}));
我們還可以通過本地人進行評估表達。

TA貢獻1816條經驗 獲得超4個贊
我認為這里沒有回答原始問題之一。我認為不使用香草eval(),因為角度應用程序將無法像Chrome應用程序一樣工作,這出于安全原因明顯阻止了eval()的使用。
- 3 回答
- 0 關注
- 925 瀏覽
添加回答
舉報