2016-05-30 5 views
0

Ich habe ein Problem, in dem ich Ergebnisse ausblenden muss, bis der Benutzer mit der Eingabe in die Suchleiste begonnen hat. Ich verwende ein DotNetNuke-Plugin und habe daher dieses Modul nicht selbst erstellt. Die Bereiche, die ich zu verwenden glaube, sind für '.angrid-search', die eine Methode hat, die die Suchbegriffe zurückgibt, die es dann verwenden wird, um zu entscheiden, ob das 'angrid-grid' angezeigt wird. Dies ist der Code, den ich bisher versucht habe, sowie viele verschiedene ähnliche Variationen.Ausblenden des Bereichs in angularJS

if (angular.element($('.angrid-search')).searchTerms === undefined){ 
    angular.element($('.angrid-grid')).hide(); 
} 

angular.element($('.angrid-search')) kommt zurück mit undefined und gibt die Suchbegriffe einmal etwas eingegeben. Es scheint mir, dass das Problem in der zweiten Zeile ist, in dem ich versuche, das Element zu verstecken.

Ich bin extrem neu zu Angular (das ist so ziemlich mein erstes echtes Problem), so würde die Erklärung in Laien sehr geschätzt werden, besonders da ich genauso wichtig lernen muss, wie ich dieses Problem lösen muss.

Hier ist der grundlegende DOM

<div class="angrid"> 
    <div class="angrid-search"> 
    </div> 
    <div class="angrid-grid-view"> 
     <div class="angrid-grid"> 
     </div> 
    </div> 
</div> 

Es gibt ein paar Sachen dazwischen, aber das sind die relavent Bereiche, und ich wollte nicht das Inspektor-Fenster cpypst. Meine Hauptfrage ist: Soll die Methode in dieser Art von Sitation funktionieren?

+2

Ich sympathisiere mit deiner Situation, aber versetz dich in unsere Schuhe: * all * wir müssen weitermachen ist dein Beitrag, was nicht annähernd genug ist, um eine Antwort zu formulieren, ohne auf Ratschläge und generische Ratschläge zurückzugreifen. Im Idealfall erstellen Sie ein [mcve] oder zumindest etwas, das geschlossen wird (z. B. mehr Code und tatsächlicher Kontext). – Jeroen

+0

Ich bearbeite ich hoffe das ist jetzt nützlicher. Weil ich die Strategie dafür nicht wirklich kenne, ist es schwierig für mich zu wissen, welchen Kontext jemand benötigt, der weiß, wie dies zu tun ist. –

+0

Warum können Sie es nicht mit "ngHide" tun? ('ng-hide ="! searchTerms || searchTerms == '' "') –

Antwort

0

Sie könnten etwas wie versuchen.

<div class="angrid"> 
<div class="angrid-search"> 
</div> 
<div class="angrid-grid-view"> 
    <div class="angrid-grid" ng-hide="hidegrid"> 
    </div> 
</div> 

und in js

if (angular.element($('.angrid-search')).searchTerms === undefined){ 
    angular.element($('.angrid-grid')).hidegrid = true; 
} 
+0

Ja danke Ich wusste nicht, dass es eine ng-hide Direktive gibt. Ich hatte in der Vergangenheit Schwierigkeiten, Änderungen direkt an den HTML-Dateien vorzunehmen, weshalb ich es, wenn möglich, vermeiden wollte. –

+0

Ich sehe .. Aber so viel einfacher, ja :) –

+0

Definitiv! Ich beginne die Dynamik von eckigen zu verstehen.Dies hat es ein wenig mehr verfestigt, da ich eine Menge dieser Art von Logik zur Ansicht gedrängt habe. Danke für die Hilfe! :) –

0

Ja. Es sollte funktionieren. Hier ist eine Demo:

angular.module('demo', []) 
 
    .controller('demoCtrl', ['$scope', 
 
    function($scope) { 
 
     $scope.testFn = function() { 
 
     if (angular.element($('.angrid-search')).searchTerms === undefined) { 
 
      angular.element($('.angrid-grid')).hide(); 
 
     } 
 
     }; 
 
    } 
 
    ]);
<script data-require="[email protected]" data-semver="1.11.3" src="http://code.jquery.com/jquery-1.11.3.min.js"></script> 
 
<script data-require="[email protected]" data-semver="1.5.5" src="https://code.angularjs.org/1.5.5/angular.js"></script> 
 

 
<div ng-app="demo" ng-controller="demoCtrl"> 
 
    <div class="angrid"> 
 
    <div class="angrid-search"></div> 
 
    <div class="angrid-grid-view"> 
 
     <div class="angrid-grid">Grid!</div> 
 
    </div> 
 
    </div> 
 

 
    <button ng-click="testFn()">the code will work...</button> 
 
</div>

By the way, erwähnen Sie:

angular.element($('.angrid-search')) kommt zurück mit undefined

Ist dies der Fall, dann offensichtlich versteckt Dinge nicht arbeiten. Sie sollten wahrscheinlich eine andere Frage mit genügend Informationen stellen, um dieses Problemszenario von Grund auf zu reproduzieren, sodass wir Ihnen helfen können, ohne auf Raten zu setzen.

+0

Ich bin verwirrt, wie das Ausblenden von Dingen nicht funktionieren würde, wenn die Suchbegriffe nicht definiert sind? Ich denke, ich habe genug Informationen gefunden, um das Problem mit den gegebenen Informationen zu lösen. Vielen Dank! –

+0

Ihr Kommentar sagt etwas subtil, aber sehr verschieden von dem zitierten Bit der Frage. In dem Kommentar erwähnen Sie "** Suchbegriffe **", aber in der Frage ist es "**' angular.element ($ ('. Angrid-search')) '**". – Jeroen

+0

in der Frage ist es "angular.element ($ ('. Angrid-search')). SearchTerms", die als undefined zurückkommt. Die Suchbegriffe sind nicht definiert, da in die Suchleiste nichts eingegeben wurde. Sobald Sie in die Leiste "Hallo" tippen, gibt der Suchbegriff "Hallo" zurück. Ich möchte, dass das Raster ausgeblendet wird, wenn die Suchbegriffe undefiniert sind, da dies geschieht, wenn noch nichts eingegeben wurde. –