我知道{{}}可以解釋的表情,但是當我嘗試它使用JavaScript,它並不像{{"a/b/c/d/".split('/').filter(function(n){return n}).reverse()[0]}}
如何使用JavaScript在{{}} AngularJS
工作,我需要用它來從網址獲得slug值。
請建議如何使用angularjs來實現此目的,url的來源是來自外部feed,因此我對此有非常有限的控制。
我知道{{}}可以解釋的表情,但是當我嘗試它使用JavaScript,它並不像{{"a/b/c/d/".split('/').filter(function(n){return n}).reverse()[0]}}
如何使用JavaScript在{{}} AngularJS
工作,我需要用它來從網址獲得slug值。
請建議如何使用angularjs來實現此目的,url的來源是來自外部feed,因此我對此有非常有限的控制。
完全JS不支持,甚至它是,這將是一個不好的做法。
我建議你至少把它放在控制器的示波器功能中。
更妙的是把它放在一個服務或過濾器,所以如果你想以後重新使用它作其他用途,您可以:
$scope.getSlug = function(str) {
return str.split("/").filter(function(n) {
return n;
}).reverse()[ 0 ];
};
,然後在你的模板:
{{ getSlug("a/b/c/d/") }}
{{ getSlug(myModelProperty) }}
此外,它是有效的閱讀Angular docs about expressions。
但我怎麼會在{{}}上使用html? – whizcreed
編輯包括它 – gustavohenke
布拉沃..正是我在找什麼.. muchas gracias ..阿米戈:D – whizcreed
{{}}
告訴Angular在你看來,你有一個Expression插值。 Angular表達式不支持所有的JavaScript。有關文檔check here。
如果你需要所有的JavaScript。將邏輯封裝在控制器功能中更好。從文檔
摘錄:
這可能是很有誘惑力的思考角度視圖表達式爲 JavaScript表達式,但是這並不完全正確,因爲 角不使用JavaScript的eval()計算表達式。你 可以把角表達式作爲JavaScript表達式與 以下區別:
屬性評價:所有屬性的評價是對 範圍做了評價,不像在JavaScript中,其中 是針對全球的窗口評估的表達式。
赦:表達的評價是寬容到undefined和null, 不像在JavaScript中,在試圖評估未定義的屬性 可以產生的ReferenceError或類型錯誤。
無控制流聲明:您無法在 中使用以下任何一種角度表達式:條件,循環或throw。
你不應該使用那樣的模板 - 所以Angular不支持它。無論是在範圍之內創建一個功能:
$scope.getSlug = function (input) {
return input.split('/').filter(function(n){return n}).reverse()[0];
}
或者創建一個過濾器,做你想要什麼acheive:
angular.module('myModule').filter('myFilter', function() {
return function (input) {
if (!input) return input;
return input.split('/').filter(function(n){return n}).reverse()[0];
};
});
而且使用這樣的:
<div>{{"a/b/c/d" | myFilter}}</div>
很好的問題.. 。我想要什麼。 –
您最好將它嵌入到模型的函數中,比如'getSlug()'並像'{{item.getSlug()}}'一樣使用它。這是更一致的方式 – oxfn
你不能,你不應該。查看[Angular Expressions vs. JS Expressions](http://docs.angularjs.org/guide/expression),或者至少你不能指望任何的javascript只是工作。 * ...另一方面,如果您確實想運行任意JavaScript代碼,則應該將其設爲控制器方法並調用該方法。如果你想eval()從JavaScript的角度表達式,使用$ eval()方法。* – Yoshi