2016-05-04 3 views
0

ich Winkel irgendwie neu bin so kann dies eine dumme Frage, aber ich habe diese Code-Snippet:AngularJS ng-Show kann sich nicht verstecken

   <tr ng-repeat="ingr in recipe.ingredients"> 
       <div ng-show="ingr.edit"> 
        <td>{{ ingr.amount }}</td> 
        <!--td>{{ ingr.units }}</td> --> 
        <td>{{ingr.edit}}</td> //here I see ingr.edit toggle 
        <td>{{ ingr.description }}</td> 
       </div> 
       <td> 
        <button type="button" class="btn btn-default" ng-click="ingr.edit = !ingr.edit"> 
         <span class="glyphicon glyphicon glyphicon-edit"></span> 
        </button> 
       </td> 

       </tr> 

aber ich kann das div nicht verbergen. Ich kann in einer der Tabellenzellen sehen, dass ingr.edit korrekt umschaltet, aber immer noch ist das div immer sichtbar.

Kann jemand helfen? dank

+0

Siehst du 'false' in deinem' {{ingr.edit}} '? Kannst du es stattdessen mit "ng-if" versuchen? – floribon

+6

Ungültiger HTML-Code. Ein '' kann nur Kinder enthalten, die '' sind. – Lex

+0

fügen Sie ng-Show zu Tabelle nicht auf div, und verwenden Sie td als Wrapper für diese Tabelle .. –

Antwort

1

Was ist so etwas wie das?

angular.module("app", []).controller("ctrl", function($scope){ 
 
    $scope.recipe = {ingredients:[{ 
 
    amount:10,edit:true,description:"foo"},//edit:true or it won't ever show in my sample 
 
    {amount:50,edit:true,description:"bar"}]}; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<table ng-app="app" ng-controller="ctrl"> 
 
<tr ng-repeat="ingr in recipe.ingredients" ng-show="ingr.edit"> 
 

 
    <td>{{ ingr.amount }}</td> 
 
    <!--td>{{ ingr.units }}</td> --> 
 
    <td>{{ingr.edit}}</td> //here I see ingr.edit toggle 
 
    <td>{{ ingr.description }}</td> 
 

 
    <td> 
 
    <button type="button" ng-click="ingr.edit = !ingr.edit"> 
 
     CLICK 
 
    </button> 
 
    </td> 
 

 
</tr>

I ist die ng-show im <tr> weil <div> Tag bewegt es ungültig, so dass es gewesen sein wird völlig ignoriert.

BEARBEITEN: siehe @ sag Antwort, um zu sehen, wie das div-Tag durch eine Tabelle ersetzt wird, damit es ausgeführt wird.

<button type="button" class="btn btn-default" ng-hide="ingr.edit"> 
    <span class="glyphicon glyphicon glyphicon-edit"></span>      
</button> 

Die Entwicklung noch auf {{ingr}} abhängt:

+0

Das einzige Problem mit diesem ist, dass, wenn die "ingr.edit" auf false, dort umgeschaltet wird Es gibt keine Möglichkeit, sie wieder auf "true" umzuschalten. Vermutlich hat das OP viel HTML weggelassen, wo einige Editier-Steuerelemente ein- und ausgeblendet werden. Ich denke, die 'ng-Show' würde am besten auf diese individuellen Edit-Steuerelemente verschoben werden, aber dies ist nur ein SWAG, da die ursprüngliche Frage keinen klaren Hinweis auf die insgesamt gewünschte Funktionalität gibt. – Lex

+0

@Lex ja deshalb habe ich das beantwortet, ich antworte auf den technischen Teil dessen, was das OP sucht. – Walfrat

1
<tr ng-repeat="ingr in recipe.ingredients"> 
      <td> 
      <table ng-show="ingr.edit"> 
       <td>{{ ingr.amount }}</td> 
       <!--td>{{ ingr.units }}</td> --> 
       <td>{{ingr.edit}}</td> //here I see ingr.edit toggle 
       <td>{{ ingr.description }}</td> 
      </table> 
      </td> 
      <td> 
       <button type="button" class="btn btn-default" ng-click="ingr.edit = !ingr.edit"> 
        <span class="glyphicon glyphicon glyphicon-edit"></span> 
       </button> 
      </td> 

      </tr> 

Tabelle enthalten nicht div, können Sie nicht div hinzufügen direkt auf tr

+0

hinzugefügt Kommentar bereits siehe oben .. –