javascript - 在 AngularJS 中选择选项返回对象而不是值

标签 javascript angularjs html

我还在学习 AngularJS,所以我不太确定实现这个的最佳方法; 我可以在普通 HTML 中执行此操作,但无法使用“selected”属性,因此我切换到 Angular 元素 - 我刚开始使用它。

我有一个带有下拉框的表单,用户可以在其中选择“用户”或“管理员”。用户的值为“2”,管理员的值为“1”。
默认情况下,“用户”是列表中预先选定的项目。
我的问题是,当表单(通过 AJAX)提交到 PHP 时,表单提交一个像 {value : "2", name : "User"} 这样的对象,我希望它只是提交值,即:“2”。

HTML 代码:

<div class="form-group col-md-6">
    <label for="usrlevel">User Level:</label>
    <select class="form-control form-control-sm"
            data-ng-init="formData.usrlevel = usrlevels[0]"
            data-ng-model="formData.usrlevel"
            data-ng-options="x.name for x in usrlevels">
    </select>
</div>

Javascript代码:

app.controller("admController", function ($scope, $http, $location) {
    $scope.usrlevels = [
      {value : "2", name : "User"},
      {value : "1", name : "Administrator"}
    ];

    $scope.addForm = function() {
        var ans="";
        $http({
            method  : 'POST',
            url     : 'php/addstaff.php',
            data        : $.param($scope.formData),
            headers : { 'Content-Type': 'application/x-www-form-urlencoded' }  //set the headers so angular passing info as form data (not request payload)
            }).then(function (response) {
                console.log(response.data);
                ans = response.data;
                if (!ans.success) {
                    // Add Error handling

                } else {
                    $('#addModal').modal('hide');
                    $scope.getStaff();  //refreshes table display
                }
            }).catch(function(response){
                console.log(response.data);
            });
    };

这是调试器的图像,显​​示对于“usrlevel”,表单正在提交一个对象,而它应该只提交所选项目的值。
因此,在调试器中,它应该只显示 usrlevel:"2" enter image description here

更新: 人们似乎认为 AJAX 调用只应提交用户级别(我认为调试器窗口图像会清楚地表明用户级别是表单中的 1 个元素),这是实际的 HTML 表单。

<form data-ng-submit="addForm()" name="addform" method="POST">
    <div class="form-group">
        <label for="name">Full Name:</label>
        <input type="text" class="form-control form-control-sm" name="name" data-ng-model="formData.name" id="name" placeholder="">
    </div>
    <div class="form-group">
        <label for="address">Address:</label>
        <input type="text" class="form-control form-control-sm" name="address" data-ng-model="formData.address" id="address" placeholder="">
    </div>
    <div class="form-group">
        <label for="suburb">Suburb:</label>
        <input type="text" class="form-control form-control-sm" name="suburb" data-ng-model="formData.suburb" id="suburb" placeholder="">
    </div>
    <div class="form-group">
        <label for="phone">Phone:</label>
        <input type="tel" class="form-control form-control-sm" name="phone" data-ng-model="formData.phone" id="phone" placeholder="">
        </div>
    <div class="form-row">
    <div class="form-group col-md-6">
        <label for="postcode">Post Code:</label>
        <input type="text" class="form-control form-control-sm" name="postcode" data-ng-model="formData.postcode" id="postcode" placeholder="">
    </div>
    <div class="form-group col-md-6">
        <label for="usrlevel">User Level:</label>
        <select class="form-control form-control-sm" data-ng-init="formData.usrlevel = usrlevels[0]" data-ng-model="formData.usrlevel" data-ng-options="x.name for x in usrlevels"></select>
    </div>
</div>
<div class="form-group">
    <label for="email">Email:</label>
    <input type="email" class="form-control form-control-sm" name="email" data-ng-model="formData.email" id="email" placeholder="">
</div>
<div class="form-group">
    <label for="suburb">Password:</label>
    <input type="password" class="form-control form-control-sm" name="password" data-ng-model="formData.password" id="password" placeholder="">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
<button type="reset" value="Reset" class="btn btn-secondry">Clear</button>

最佳答案

您问为什么您在选择时获得整个对象,而不仅仅是选择的值。

这是因为您使用了

 data-ng-options="x.name for x in usrlevels"

这会将 X 设置为选择时的模型,如果您只想将 x 的名称/任何其他属性设置为您需要使用的模型

  data-ng-options="x.value as x.name for x in usrlevels" data-ng-model="formData.value"

告诉 Angular 选择 x 将其显示为 y。

使默认选择起作用

现在您需要使用所选用户对象的值更新$score.formData.value

例如在你的 Controller 中

app.controller("admController", function ($scope, $http, $location) {
    $scope.usrlevels = [
      {value : "2", name : "User"},
      {value : "1", name : "Administrator"}
    ];
    $scope.formData = { value: "1"} // prepare formData and set user with value 1 (Admin) to be selected by default

最后发送整个表单数据。

http({
        method  : 'POST',
        url     : 'php/addstaff.php',
        data        : $scope.formData,
        headers : { 'Content-Type': 'application/x-www-form-urlencoded' }  //set the headers so angular passing info as form data (not request payload)
        }).then(function (response) {
            ...etc

再次仅传递您需要的ajax数据,不要传递整个对象!

关于javascript - 在 AngularJS 中选择选项返回对象而不是值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51185038/

相关文章:

javascript - 我究竟做错了什么?我正在尝试使用 jQuery 单击使图像变大或变小

javascript - 如何让我的导航面板根据事件页面更改颜色?

javascript - 在 jQuery 中组合复选框选择器以获得唯一结果

javascript - RequireJS 不执行所有文件

angularjs - 在 ui-grid AngularJs 中重新显示隐藏列

html - AngularJS:一个 index.html 中的注册和内容页面

javascript - 推特 Bootstrap : Print content of modal window

javascript - 使用 Ajax 在 Hover 上播放声音

javascript - Angular 中的动态选择元素过滤

javascript - 如何从最接近的 'tr' 的第 n 个元素获取值?