angularjs - 在 angularjs 中使用引导模式时没有数据绑定(bind)

标签 angularjs angular-ui-bootstrap

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

下面是我的代码

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

最佳答案

当您这样做时,您正在检索不同的对象

return entryFactory.getEntry(id);

并绑定(bind)到模式。

鉴于您的列表绑定(bind)到具有不同引用的集合

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

此处的选项是在通过调用 getEntries 完成更新时重新获取实体在 $modalInstance.close(); 之后

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

关于angularjs - 在 angularjs 中使用引导模式时没有数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22397130/

相关文章:

javascript - 当 AngularJS 中的 Controller 可以完成同样的事情时,为什么要使用自定义指令?

html - 如何在 Bootstrap 中调整我的输入表单的长度

angularjs - $modalInstance 对话框关闭,但屏幕仍呈灰色且无法访问

css - 如何根据父级的名称属性更改CSS类

javascript - 如何使用多个链接过滤 AngularJS 中的列表

javascript - 为何今天如此插入客户端框架?

javascript - 嵌套在 Popover 中的 ng-repeat 不起作用

android - Cordova /Phonegap : Live update codebase

angularjs - 中心 Angular 模态用户界面

javascript - 如何在 Angular js 中声明设备就绪