[英]How to use JavaScript inside ng-if AngularJS?
我試圖使用ng-if
的JavaScript
表達式。 但是,它沒有做任何事情。 它總是返回false
。
我嘗試的是以下內容:
ng-if="localStorage.getItem('grid-layout') == 'list'
(如果為true,則顯示div)
div
不會渲染,因為它總是返回false
。 網格布局值保存在localStorage
。 這不是問題。
我檢查了網站上的文檔。 Angular
說以下關於ng-if
https://docs.angularjs.org/api/ng/directive/ngIf
如果表達式是假的,那么該元素將從DOM樹中刪除。 如果它是真實的,則編譯元素的副本被添加到DOM樹中。
是否可以在ng-if
使用JavaScript
? 如果沒有,我怎樣才能實現我想做的事情?
您可以在ng-if中使用Javascript表達式,但只能訪問當前模板的$scope
中的屬性。
除非您專門將localStorage
添加到$scope
對象,否則localStorage
不太可能。
一種方法是在控制器中編寫附加到$ scope的函數:
//in controller JS
$scope.checkLocalStorage = function() {
return localStorage.getItem('grid-layout') == 'list';
}
//In template
<div ng-if="checkLocalStorage()"></div>
我不認為你可以在ng-if
使用localstorage,因為ng-if
是angular指令它只支持角度表達式。 您可以做的一件事是創建一個范圍函數並返回localstorage值
ng-if="getStorage() == 'list'"
$scope.getStorage = function(){
return localStorage.getItem('grid-layout');
}
將您的邏輯移動到控制器:
在HTML調用方法中:
ng-if="checkForLocalStorage()"
並在控制器中,注入$window
和寫入方法,如:
$scope.checkForLocalStorage = function(){
return $window.localStorage.getItem('grid-layout') == 'list'
}
此外 ,更好的方法是在controller
創建布爾屬性,並將其綁定到ng-if
。 否則,由於角度摘要周期,您的方法將在每個模型\\綁定更改時被調用。
你可以這樣做,在控制器中:
$scope.isGridLayoutList= $window.localStorage.getItem('grid-layout') == 'list' ;
並在HTML中: ng-if="isGridLayoutList"
不需要在$scope
變量中存儲函數並在html中調用它。 您可以將truthy / falsy值直接存儲在變量中,並將其用於ng-if
,Better並減少代碼行
$scope.toShow = (localStorage.getItem('grid-layout') == 'list');
<div ng-if="toShow"></div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.