2016-10-11 2 views
0

showOrHide-Funktion wird True zurückgegeben, wenn ich auf einen Link klicke.Angular, Funktion zurück True, aber ng-Show funktioniert nicht

Ich habe diesen Code mit den Funktionen alert und console.log getestet und es funktioniert, aber wenn ich diesen Code in ng-show- oder ng-hide-Direktiven testen will, wird es nicht funktionieren. Ich kann dieses Problem nicht verstehen.

Summe: Funktion gibt false zurück, wenn ich auf einen Link klicke, gibt es true zurück Aber True und False funktioniert nicht in ng-show.

Angularjs Datei

$scope.showOrHide = function (value) { 
 
     if (typeof value !== 'undefined') 
 
     { 
 
      return alert(true); 
 
      //console.log("true"); 
 
      //return true; 
 
     }else { 
 
      return alert(false); 
 
      //console.log("false"); 
 
      //return false; 
 
     } 
 
    }; 
 
    $scope.projectId = $stateParams.projectId; 
 
    $scope.showOrHide($stateParams.projectId);

html-Datei

<tr ng-repeat="n in data.projects track by $index" 
 
    ng-href="@{{n.id}}" 
 
    ui-sref="goTo({ projectId: n.id })"> 
 
    <td>@{{n.project_code}}</td> 
 
    <td>@{{n.project_name}}</td> 
 
    <td class="text-primary">will add</td> 
 
    <td class="text-primary">will add</td> 
 
    <td class="text-primary">@{{n.status}}</td> 
 
    <td ng-show="showOrHide">test</td> 
 
</tr>

Antwort

0

Ich gebe auf alle von Lösungen, weil diese nicht funktionieren, also habe ich meinen Code nicht überarbeitet. Ich habe alle geändert.

Hier ist die Lösung.

JS

$scope.checkThis = true; 

$scope.isShow = function (number) { 
    return number; 
}; 
$scope.toFalse = function() { 
    $scope.checkThis = false; 
}; 
$scope.toTrue = function() { 
    $scope.checkThis = true; 
}; 

HTML Datei

<tr ng-repeat="n in data.projects track by $index" 
    ng-href="@{{n.id}}" 
    ui-sref="goTo({ projectId: n.id })"> 
    <td>@{{n.project_code}}</td> 
    <td>@{{n.project_name}}</td> 
    <td class="text-primary">will add</td> 
    <td class="text-primary">will add</td> 
    <td class="text-primary">@{{n.status}}</td> 
    <td class="text-primary" ng-click="toFalse()" 
         ng-show="isShow(checkThis)">test</td> 
        </tr> 

Es ist auf einfache Weise Datei, denke ich. Ich verschwende 3 Stunden in die andere Richtung.

1

Sie ng-show auf einer Funktion keine Variable basiert, so dass Sie es als eine Funktion schreiben müssen.

HTML:

<td ng-show="showOrHide('undefined')">test</td> 

JS:

$scope.showOrHide = function (value) { 
     if (typeof value !== 'undefined') 
      return true; 
     else 
      return false; 

    }; 
+0

Ich habe versucht, aber es hat nicht funktioniert. –

+0

Wird angezeigt oder nicht angezeigt? – Ohjay44

+0

Es wurden keine Daten angezeigt, aber ich klicke auf einen Link, um den Rückgabewert zu ändern, aber es hat sich nicht geändert. Ich verstehe das nicht warum ist das passiert –

0

Ergebnisvariable erstellen wie:

$scope.toShowOrToHide = $scope.showOrHide($stateParams.projectId); 

und HTML:

<td ng-show="toShowOrToHide">test</td> 

Und JS Rückkehr ohne Alarm:

$scope.showOrHide = function (value) { 
    return (typeof value !== 'undefined'); 
}; 

Edited:

$scope.toShowOrToHide = function() { 
    return $scope.showOrHide($stateParams.projectId); 
); 

Und HTML:

<td ng-show="toShowOrToHide()">test</td> 

Sie sind wahrscheinlich entschieden, was BES für Sie passt ....

+0

Das ist nicht gut. Sie möchten, dass die ng-show in jedem Digest überprüft wird (oder Sie sollten nicht ng-show verwenden). Dieses Beispiel zeigt das Element nicht, wenn sich $ stateParams.projectId ändert. – arthurzp

1

Wenn ich verstanden habe, was Sie erreichen möchten (zeigen Sie das Element nur, wenn eine $ stateParams.projectId e xists) können Sie einfach die Variable verwenden Sie bereits gesetzt ist, so entfernen Sie die Funktion und benutzen Sie einfach die folgenden Schritte aus:

cotroller:

app.controller('myController', function($scope, $stateParams) { 

    // other code here... 

    $scope.projectId = $stateParams.projectId || false; 
}); 

Ansicht:

<tr ng-repeat="n in data.projects track by $index" 
    ng-href="@{{n.id}}" 
    ui-sref="goTo({ projectId: n.id })"> 
    <td>@{{n.project_code}}</td> 
    <td>@{{n.project_name}}</td> 
    <td class="text-primary">will add</td> 
    <td class="text-primary">will add</td> 
    <td class="text-primary">@{{n.status}}</td> 
    <td ng-show="projectId">test</td> 
</tr> 
0

Erste

$scope.stateParams = $stateParams; 

Dann

ng-show="stateParams.projectId" 

Keine Funktion benötigt und Wert wird automatisch aktualisiert, wenn die param Änderungen.

Verwandte Themen