在angularjs中使用bootstrap模式时没有数据绑定

时间:2014-03-14 05:46:37

标签: angularjs angular-ui-bootstrap

我正在使用mongodb,express,angularjs和nodejs来开发一个简单的应用程序。但是,我遇到一个问题,当我使用bootstrap模式编辑记录时,数据不会与ng-repeat中的数据绑定。

以下是我的代码

entryController.js

function entryController($scope, $modal, entryFactory) {


// Get All Entry
entryFactory.getEntries().success(function(data) {
  $scope.entries = data;
});


// View Entry Detail
$scope.editEntry = function(id){
  var id = id._id;

  var modalInstance = $modal.open({
    templateUrl: 'editEntryModal',
    controller: editEntryModalController,
    resolve: {
        entry: function(){
            return entryFactory.getEntry(id);
        }
    }
  });
};

};

var editEntryModalController = function($scope, $modalInstance, $window, data, entryFactory)  {
$scope.entry = {};


$scope.entry = data.data.entry;
$scope.entry.name = data.data.entry.name;


$scope.editEntry = function(){
    entryFactory.updateEntry(data.data.entry._id, $scope.entry).success(function(){

        $modalInstance.close();
    });
};

$scope.cancel = function(){
    $modalInstance.dismiss('cancel');
}
};

下面是我的html代码(entry.html)

<div class="container-fluid">
  <div class="row">

    <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">


        <button type="button" class="btn btn-default btn-lg" ng-click="addEntry()"><span class="glyphicon glyphicon-plus"></span></button>


        <div class="col-sm- col-xs-12 col-lg-3">
        <form class="form-search">
              <div class="input-group">
                  <input type="text" class="form-control " placeholder="Search..." ng-model="query">
                  <span class="input-group-btn">
                      <button type="submit" class="btn btn-search">Search</button>
                  </span>
              </div>
          </form>
        </div>

        <br />
        <br />

        <div class="panel panel-default">
            <div class="panel-heading">
                <h4>List Entry</h4>
            </div>

            <table class="table table-striped">
                <thead>
                    <tr>
                        <th>#</th>
                        <th>Name</th>
                        <th>Email</th>
                        <th>Country</th>
                        <th>Comment</th>
                        <th></th>
                    </tr>
                </thead>
                <tbody>
                    <tr ng-repeat="entry in entries | filter: query">
                        <td>{{$index+1}}</td>
                        <td>{{entry.name}}</td>
                        <td>{{entry.email}}</td>
                        <td>{{entry.country}}</td>
                        <td>{{entry.comment}}</td>
                        <td>
                            <button type="button" class="btn btn-default btn-lg" ng-click="viewEntry(entry)"><span class="glyphicon glyphicon-eye-open"></span></button>
                            <button type="button" class="btn btn-default btn-lg" ng-click="editEntry(entry)"><span class="glyphicon glyphicon-edit"></span></button>
                            <button type="button" class="btn btn-default btn-lg" ng-click="deleteEntry(entry)"><span class="glyphicon glyphicon-trash"></span></button>
                        </td>
                    </tr>
                </tbody>
            </table>

        </div>

    </div>

  </div>
</div>


<!-- Edit Entry Modal -->
<script type="text/ng-template" id="editEntryModal" />
<div modal="entryEdit">
<div class="modal-header">
    <h3>Edit - {{ entry.name }}</h3>
</div>
<div class="modal-body">
  <form role="form" class="form-horizontal" ng-model="addForm">
  <div class="form-group">
    <label for="inputName" class="col-sm-2 control-label">Name</label>
    <div class="col-sm-6">
      <input type="text" class="form-control" id="inputName" ng-model="entry.name" name="name" placeholder="Name">
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-sm-2" for="inputEmail">E-mail</label>
    <div class="col-sm-6">
      <input type="text" class="form-control" id="inputEmail" ng-model="entry.email" name="email" placeholder="E-mail">
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-sm-2" for="inputCountry">Country</label>
    <div class="col-sm-6">
      <input type="text" class="form-control" id="inputCountry" ng-model="entry.country" name="country" placeholder="Country">
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-sm-2" for="inputComment">Comment</label>
    <div class="col-sm-6">
      <input type="text" class="form-control" id="inputComment" ng-model="entry.comment" name="comment" placeholder="Your Comment">
    </div>
  </div>
  </form>
  </div>
  <div class="modal-footer">
    <button ng-click="editEntry()" class="btn btn-info"><i class="icon-plus icon-white"></i>Save</button>
    <button class="btn btn-warning cancel" ng-click="cancel()">Cancel</button>
  </div>
  </div>
</div>
</script>

以下是问题的打印屏幕。

http://imageshack.com/a/img534/3024/h5cy.png

1 个答案:

答案 0 :(得分:1)

当您执行

时,您正在检索其他对象

return entryFactory.getEntry(id);

并绑定到modal。

而您的列表绑定到具有不同引用的集合

entryFactory.getEntries().success(function(data) {
  $scope.entries = data;
})

此处的选项是在getEntries

之后调用$modalInstance.close();完成更新后重新获取实体

其次是更新对象并将其添加到替换旧对象的集合中。