繁体   English   中英

如何在点击事件中将数据传递到AngularJS中的模式中

[英]How to pass data into a modal in AngularJS on click event

这是我的问题:

我正在使用AngularJS将简单的数据跟踪应用程序转换为SPA。 我的HTML模板中有带有可点击日期的表格,该表格显示了一些数据。 每个按钮都分配有一个ID,该ID是从数据库中的ObjectId属性派生的。 我的目标是将这些按钮与更新功能挂钩,我需要自动填充表单。 我可以查询以前构建的API并获取数据,但无法将其公开给我的模态。

我的API已经构建并经过测试。 模态工作,它会在我需要时打开和关闭,并且表单看起来不错。

我的表格标记:

<tbody ng-repeat="flt in vm.data.flights">
  <tr>
    <td><a ng-attr-id="{{ flt._id }}" ng-click="vm.popupReviewForm()" class="btn btn-default">{{flt.fltDate}}</a></td>
    <td>{{flt.hobbsIn}}</td>
    <td>{{flt.hobbsOut}}</td>
    <td>{{flt.hoursFlown}}</td>
    <td>{{flt.fuelHour}}</td>
    <td>{{flt.fuelIn}}</td>
    <td>{{flt.hoursLastOilChange}}</td>
    <td class="text-info">{{flt.oilChange}}</td>
  </tr>
</table>

页面的控制器,使用我获取ID并将其传递给模式的方法:

vm.popupReviewForm = function ($event) {
      var id = $event.currentTarget.attributes['id'].value;
      var modalInstance = $modal.open ({
        templateUrl : '/reviewModal/reviewModal.view.html',
        controller : 'reviewModalCtrl as vm',
        resolve : {
          data : function () {
            return {
              data : flightData.flight(id)
            };
          }
        }
      });
      modalInstance.result.then(function (data) {
        //
      });
    };

我的数据服务会进行API调用(我相信API能够正常运行):

var findOne = function (id) {
      return $http.get('/findone/' + id);
    };

    return {
      flightData : getData,
      flight : findOne
    };

这就是我卡住的地方。 我的决心中产生的数据应该作为flight.data传递到模式控制器中,对吗? 这是我的模态控制器:

angular
.module('loc8rApp')
.controller('reviewModalCtrl', reviewModalCtrl);



reviewModalCtrl.$inject = ['$modalInstance', 'loc8rData', 'flight'];
  function reviewModalCtrl ($modalInstance, loc8rData, flight) {
    var vm = this;
    vm.formError = "";
    vm.flight = flight.data;
    $log(vm.flight);
    vm.onSubmit = function () {

  if (!vm.data.fltDate || !vm.data.hobbsOut || !vm.data.fuelOut || !vm.data.oilDipstick) {
    vm.formError = "Hobbs Out, Fuel Out, Date, and Oil Dipstick are required!";
    console.log(vm.data);
    return false;
  } else {
    vm.formError = "";
    //
  }
};

vm.modal = {
  close : function (result) {
    $modalInstance.close(result);
  },
  cancel : function () {
    $modalInstance.dismiss('cancel');
  }
};
}

这是表单的一些HTML标记,包括一个示例输入字段,以及我当前尝试将vm.flight对象绑定到表单的尝试:

<div class="form-group">
    <label for="fltDate" class="col-xs-2 col-sm-2 control-label">Flight Date:</label>
    <div class="col-xs-10 col-sm-10">
      <input id="fltDate" name="fltDate" required="required" value="{{ vm.flight.flt_date }}" class="form-control"/> 
    </div>
  </div>

我知道这是很多代码,但是这个问题使我发疯。 不能像普通函数那样通过其参数将数据传递到控制器吗? 非常感谢所有帮助。

上面是jsonmurphy所说的,但是要扩展一点,解析将作为依赖项传递到控制器中。 因此,通过定义控制器的方式,您可以将解析度更改为以下内容,并且应该可以使用。

    resolve : {
      flight : function () {
        return {
          data : flightData.flight(id)
        };
      }
    }

由于flightData.flight(id)返回了一个Promise,并且您希望解决方案等待它,请尝试以下操作:

resolve: {
  flight: function(){ return flightData.flight(id); }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM