2016-04-23 34 views
3

真的很新的角度,但我有这个待办事项列表工作。我添加了一个模式按钮,并且我希望任务项目在每个创建的模式内更新。出于某种原因,我无法让模态显示分配给它的任务项目的正确名称。它被卡住所有模态的索引0。更新模态与角度传递的数据

first modal correct

second modal still reflecting first

下面是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> 

和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

<header> 
    <ul class="nav nav-tabs"> 
     <li role="presentation"> 
      <a href="#/">Home</a> 
     </li> 
     <li role="presentation" class="active"> 
      <a href="#/second">History</a> 
     </li> 
    </ul> 
</header> 

<div id="mainBox"> 
    <ul ng-repeat="x in controller2Ar" class="list-group" id="repeatBoxAlt"> 
     <li class="list-group-item col-xs-12 col-sm-8 col-md-4 col-lg-4 col-centered lead strike"> 
      <center> 
      <h7>{{x.item}}</h7> 
      </center> 
     </li> 
    </ul> 
</div> 

这里是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> 

回答

1

这是因为你的情态动词没有独特的ID和触发:

添加{{index}}或唯一标识符两者的模式ID,并显示触发模态。

<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

你能解释我做错了什么只是为了澄清?我明白,它只是引用初始模态,每次我创建一个新模态,模态创建,但按钮只是指向第一个。 – jwhite30

+0

好,所以你有多个模式具有相同的ID和一个引用该ID的触发器。触发器绑定到第一个模式,每次你点击触发器触发第一个模式。 – cnorthfield