[英]Angular create element if another is non-existent
我有一個州(佛羅里達,阿拉巴馬州)的列表,我想在第一個字母的第一次出現上方創建命名錨。
<nav>
<ul class="letters">
<li ng-repeat="letter in locations.getLetters()">
<a href="#{{letter}}">{{letter}}</a>
</li>
</ul>
</nav>
<nav>
<ul class="locations">
<li ng-repeat="state in locations.states">{{state.state}}
<a ng-if="" id="{{state.state.charAt(0)}}">fgsdf</a>
<ul>
<li ng-repeat="city in state.cities">
<a href>{{city.name}}</a>
</li>
</ul>
</li>
</ul>
</nav>
我被困在<a ng-if="" id="{{state.state.charAt(0)}}">fgsdf</a>
我已經嘗試了ng-if="!document.getElementById(state.state.charAt(0))"
,但該方法不起作用。 有人對我應該如何處理有任何建議嗎?
我考慮過使用angular的內置過濾器過濾ngRepeat
的狀態。 用戶單擊A
,僅應顯示以A開頭的狀態。 這似乎是一種更干凈,更直觀的方法,並將改善用戶體驗。
您可以嘗試這種方法
假設您輸入的內容是一個簡單的字符串數組。 在將其放入控制器之前,我們可以使用一個簡單的對象按每個狀態的第一個字母對狀態進行分組(字母是鍵,值是字符串數組)
html :
<body ng-app="HelloApp" ng-controller="Controller" class="container">
<div class="well">
<a href="#{{letter}}" ng-repeat="(letter,states) in letters">{{letter}} </a>
</div>
<div ng-attr-id="{{letter}}" ng-repeat="(letter,states) in letters">
<h1>{{letter}}</h1>
<h2 ng-repeat="state in states">{{state}}</h2>
<hr>
</div>
</body>
js :
angular.module('HelloApp', [])
.controller('Controller', function ($scope) {
var states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyomin'];
// Let's prepare the input
var letters = $scope.letters = {};
states.forEach(function (state) {
var letter = state.charAt(0);
if (!letters[letter]) {
letters[letter] = [];
}
letters[letter].push(state);
});
})
<h1>{{letter}}</h1>
,謝謝@Tony 那是行不通的,因為文檔不是當前范圍的一部分。 您可以執行以下操作:
控制器:
$scope.elementExists = function (selector) {
return typeof $document.getElementById(selector) !== 'undefined';
}
HTML:
<a ng-if="!elementExists('elementId')">Link</a>
不要忘記添加$ document作為控制器的依賴項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.