2016-04-23 2 views
3

Wirklich neu zu eckig, aber ich habe diese To-Do-Liste arbeiten. Ich habe eine modale Schaltfläche hinzugefügt und möchte, dass das Aufgabenelement in jedem erstellten Modal aktualisiert wird. Aus irgendeinem Grund kann das Modal nicht den korrekten Namen des Aufgabenelements anzeigen, dem es zugewiesen ist. Es ist fest, dass es für alle Mods auf den Index 0 verweist.Aktualisierung modal mit Daten im Winkel übergeben

first modal correct

second modal still reflecting first

hier ist die html:

<header> 
    <ul class="nav nav-tabs"> 
     <li role="presentation" class="active"> 
      <a href="#/">Home</a> 
     </li> 
     <li role="presentation"> 
      <a href="#/second">History</a> 
     </li> 
    </ul> 
</header> 
<center> 
    <div> 
     <div class="form-group"> 
      <div class="col-xs-12 col-sm-8 col-md-4 col-lg-4 col-centered" id="nv"> 
       <div class="row"></div> 
       <input ng-model="newItem" ng-keypress="addItem($event)" type="text" class="form-control lead" id="nv" placeholder="Add a grocery."> 
      </div> 
     </div> 
    </div> 
</center> 
<div id="mainBox"> 
    <ul class="list-group checked-list-box" id="repeatBox"> 
     <li class="list-group-item col-xs-12 col-sm-8 col-md-4 col-lg-4 col-centered" id="liBox" ng-repeat="x in displayHold" > 
      <input type="checkbox" ng-model="deleted"></input> 

      <h7 id="lItem" class="lead" ng-class="{strike: deleted,notActive: deleted}">{{x.item}}</h7> 
      <button type="button" class="btn btn-default pull-right" ng-click="rmList(x)"> 
       <span class="glyphicon glyphicon-trash" id="icon"></span> 
      </button> 
      <button type="button" class="btn btn-default pull-right" data-toggle="modal" data-target="#myModal"> 
       <span class="glyphicon glyphicon-plus" id="icon"></span> 
      </button> 
      <div class="container"> 
       <div id="myModal" class="modal fade" role="dialog"> 
        <div class="modal-dialog"> 
         <div class="modal-content"> 
          <div class="modal-header"> 
           <button type="btn btn-default" class="close" data-dismiss="modal">&times;</button> 
           <h4 class="modal-title">{{modalItem(x)}}</h4> 
          </div> 
          <div class="modal-body lead"> 
           <p>{{displayHold.x}}</p> 
          </div> 
          <div class="modal-footer"> 
           <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
          </div> 
         </div> 
        </div> 
       </div> 
      </div> 
     </li> 

    </ul> 
</div> 

und js:

var app = angular.module('app', ['ngRoute']); 

app.config(['$routeProvider', function($routeProvider) { 
    $routeProvider 
     .when('/', { 
      templateUrl: 'templates/home.html', 
      controller: 'homeCTRL' 
     }) 
     .when('/second', { 
      templateUrl: 'templates/second.html', 
      controller: 'secondCTRL' 
     }) 
     .otherwise({ 
      redirectTo: '/' 
     }); 
}]); 

//services 

//history 
app.service('carry', function() { 
    var transferAr = []; 
    var addList = function(newObj) { 
     transferAr.push({ 
      item: newObj 
     }); 
    }; 
    var getList = function() { 
     return transferAr; 
    }; 
    return { 
     addList: addList, 
     getList: getList, 
    }; 
}); 
//home temporary 
app.service('hold', function() { 
    var holdTransferAr = []; 
    var holdAddList = function(newObj) { 
     holdTransferAr.push({ 
      item: newObj 
     }); 
    }; 
    var holdGetList = function() { 
     return holdTransferAr; 
    }; 
    return { 
     holdAddList: holdAddList, 
     holdGetList: holdGetList, 
    }; 
}); 

//controllers 
app.controller('homeCTRL', ['$scope', 'carry', 'hold', '$log', function($scope, carry, hold, $log) { 
    $scope.newItem = ''; 

    $scope.addItem = function(e) { 
     if (e.which === 13) { 
      hold.holdAddList($scope.newItem); 
      $scope.newItem = ''; 
     } 
    }; 

    $scope.displayHold = hold.holdGetList(); 

    $scope.rmList = function(item) { 
     //get index of displayHold 
     $scope.index = $scope.displayHold.indexOf(item); 

     //add it to historylist 
     carry.addList($scope.displayHold[$scope.index].item); 
     //remove displayHold 
     $scope.displayHold.splice($scope.index, 1); 
    }; 

    $scope.modalItem = function(item){ 

     $scope.index = $scope.displayHold.indexOf(item); 
     return $scope.displayHold[$scope.index].item; 
    }; 




}]); 

app.controller('secondCTRL', ['$scope', 'carry', function($scope, carry) { 

    $scope.controller2Ar = carry.getList(); 

}]); 

second.html

hier ist die index.html

<!DOCTYPE HTML> 
<html ng-app="app"> 
    <head> 
     <meta charset="utf-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <link href='https://fonts.googleapis.com/css?family=Roboto:400,500' rel='stylesheet' type='text/css'> 
     <link rel="stylesheet" href="https://bootswatch.com/paper/bootstrap.min.css"/> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 
     <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 

     <link rel="stylesheet" href="main.css"/> 
    </head> 
    <body> 

     <div ng-view></div> 

     <script src="node_modules/angular/angular.min.js"></script> 
     <script src="node_modules/angular-route/angular-route.min.js"></script> 
     <script src="app.js"></script> 
    </body> 
</html> 

Antwort

1

Es ist, weil Ihr Modalverben haben keine eindeutigen IDs und löst:

hinzufügen {{index}} oder eine eindeutige Kennung, die sowohl in der modal-ID und den Auslöser, um das Menü modal.

<header> 
    <ul class="nav nav-tabs"> 
     <li role="presentation" class="active"> 
      <a href="#/">Home</a> 
     </li> 
     <li role="presentation"> 
      <a href="#/second">History</a> 
     </li> 
    </ul> 
</header> 
<center> 
    <div> 
     <div class="form-group"> 
      <div class="col-xs-12 col-sm-8 col-md-4 col-lg-4 col-centered" id="nv"> 
       <div class="row"></div> 
       <input ng-model="newItem" ng-keypress="addItem($event)" type="text" class="form-control lead" id="nv" placeholder="Add a grocery."> 
      </div> 
     </div> 
    </div> 
</center> 
<div id="mainBox"> 
    <ul class="list-group checked-list-box" id="repeatBox"> 
     <li class="list-group-item col-xs-12 col-sm-8 col-md-4 col-lg-4 col-centered" id="liBox" ng-repeat="x in displayHold track by $index" > 
      <input type="checkbox" ng-model="deleted"></input> 

      <h7 id="lItem" class="lead" ng-class="{strike: deleted,notActive: deleted}">{{x.item}}</h7> 
      <button type="button" class="btn btn-default pull-right" ng-click="rmList(x)"> 
       <span class="glyphicon glyphicon-trash" id="icon"></span> 
      </button> 
      <button type="button" class="btn btn-default pull-right" data-toggle="modal" data-target="#myModal{{index}}"> 
       <span class="glyphicon glyphicon-plus" id="icon"></span> 
      </button> 
      <div class="container"> 
       <div id="myModal{{index}}" class="modal fade" role="dialog"> 
        <div class="modal-dialog"> 
         <div class="modal-content"> 
          <div class="modal-header"> 
           <button type="btn btn-default" class="close" data-dismiss="modal">&times;</button> 
           <h4 class="modal-title">{{modalItem(x)}}</h4> 
          </div> 
          <div class="modal-body lead"> 
           <p>{{displayHold.x}}</p> 
          </div> 
          <div class="modal-footer"> 
           <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
          </div> 
         </div> 
        </div> 
       </div> 
      </div> 
     </li> 

    </ul> 
</div> 
+0

Können Sie erklären, was ich falsch gemacht habe, nur zur Klarstellung? Ich verstehe, dass es sich nur auf das anfängliche Modal bezog und jedes Mal, wenn ich ein neues erstellte, wurden die Modale erstellt, aber der Button zeigte nur auf den ersten. – jwhite30

+0

Ok, also hatten Sie mehrere Modale mit der gleichen ID und einem Trigger, der auf diese ID verweist. Der Trigger wurde an das erste Modal gebunden und jedes Mal, wenn Sie auf den Trigger klickten, wurde das erste Modal ausgelöst. – cnorthfield