2014-10-22 126 views
1

我正在使用Angular.js作爲一個web應用程序。我有一些數據我想$eval(),但問題是,在我這樣做之前,我需要用字符串中的佔位符替換我使用的變量的名稱。我寫了一個過濾器來處理,但我不知道如何在字符串傳遞到$eval()之前運行過濾器。

這裏是想什麼我發生的例子:

app.js

$scope.newVariable=3; 
$scope.test='2+[placeholder]'; 

的index.html

<p>{{$eval(test|replace:'[placeholder]':'newVariable')}}</p> 

我希望發生的是「[佔位符]'替換爲'newVariable',然後將該新字符串傳遞給$eval()。現在寫入的方式,頁面在加載時崩潰。我已經單獨測試過濾器,所以我知道這不是問題。有沒有辦法在字符串$eval() ed之前應用此過濾器?

回答

2

首先,應該在必須指定的範圍上調用$eval

由於過濾器可以很容易地在Angular中鏈接,因此您可以嘗試創建額外的過濾器,對替換後的表達式執行評估,然後顯示它。

例如,過濾器定義可能看起來像:

.filter('eval', function() { 
    return function(expr, scope) { 
     // Note how $eval is called for the passed in scope. 
     return scope.$eval(expr); 
    } 
}) 

然後在你的HTML:

{{ test | replace:'[placeholder]':'newVariable' | eval:this }} 

注意,提供給eval過濾this應該是控制器的$scope

相關問題