Javascript 作用域中的初始化将覆盖数组值

Javascript 作用域中的初始化将覆盖数组值,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我面临一个小问题。我几乎完成了我的功能 我有一个表单,其中我有一个选项给用户提交多个项目。点击“添加更多”功能后,动态生成dropdownlist,有助于实现这一点。现在用户可以生成任意数量的dropdownlists。我捕获数组中的值并将其发送到服务器以保存在数据库中 以下是HTML代码: <form name="form" class="form-horizontal" ng-submit="save()" style="margin-left:220px;">

我面临一个小问题。我几乎完成了我的功能

我有一个表单,其中我有一个选项给用户提交多个项目。点击“添加更多”功能后,动态生成dropdownlist,有助于实现这一点。现在用户可以生成任意数量的dropdownlists。我捕获数组中的值并将其发送到服务器以保存在数据库中

以下是HTML代码:

<form name="form" class="form-horizontal" ng-submit="save()" style="margin-left:220px;">
        <table cellpadding="10">    
<tr>
                <td></td>
                <!--data-ng-repeat='item in array'-->
                <td style="width: 270px;">
                    <div>
                        <div ng-controller="AlertDemoCtrl">
                            <alert ng-repeat="alert in alerts" type="alert.type" close="closeAlert($index)" ng-model="ProjectId[item]">
                        <ul style="list-style-type: none; margin-left: 0px;">
                            <li >
                                <!--data-ng-model="selectedProject[$index]"-->
                                <!--data-ng-model="test.ProjectId"-->
                                <!--<select data-ng-model="test.ProjectId" 
                                data-ng-options="test.ProjectId as test.ProjectName for test in items" id="Project">-->
                                <select>
                                    <option value="">-- Choose a Project --</option>
                                    <option ng-repeat="item in items" value="{{item.ProjectId}}">{{item.ProjectName}}</option>
                                </select>
                                <button type="button" ng-click="closeAlert($index)"><img src="delete.png" alt="Remove" style="height:20px; width:20px;" /></button>
                            </li>
                        </ul>
                    </alert>
                            <button class='btn' type='button' ng-click="addAlert()">Add Projects</button>
                        </div>
                    </div>
                </td>
                <td>
                    <label id="Label2" style="color: red"></label>
                </td>
            </tr>
</table>
        <div style="margin-left: 200px;">
            <input type="submit" class="btn btn-primary" name="Submit" value="Submit" onclick="return validateForm()" />
            <a href="#/emp" class="btn">Cancel</a>
        </div>

    </form>
现在,我没有在服务器端代码中获取所选的值。可能出现的问题有:

  • 代码无法将值发送到服务器端代码,即它正在传递一个空数组
  • $scope.item.ProjectId=[]的初始化;正在重写发布的值,因此我得到了空数组
  • 注意:当我在控制器中传递静态值时,如:

    $scope.item.ProjectId=[5,7]

    功能正常

    请导游

    Thanx一吨


    Tushar Sharma

    您应该将所选值存储在模型中,并将模型与ng submit一起发送。我也不建议在select标记中使用ng repeat填充选项。请记住,ng model等于value=“”。模型中的内容就是发送的内容。如果要在加载视图时预选某个对象,也可以使用模型

    执行以下操作(示例的小型版本):

    模板
    嗯,你是用ng提交的吗?如果在提交时执行save()函数,我觉得每次都会重置数组,因此只发送一个空数组。请显示表单标签的显示方式。此外,您不应使用value=“”。。在做角度测量时,让模型做它应该做的。这是表单标签。我正在使用ng提交。那么,我们应该使用什么替代方案呢?以及谈论value=”“这件事。我没有其他选择,因为我们希望使用projectid值进行数据传输。所以我必须接受它。这是必需的,因为我们正在使用卷曲语法插值来填充dropdownlist。如果您这样做,那么在执行我建议的操作时,您将发送所选的projectId。我使用了此技术,但没有获得通过。甚至连正在传递的旧数据都没有。因此,您所做的基本上是将数据存储为名为myForm的对象的属性。是吗?是的,在使用“myForm”作为前缀的表单中选择的所有内容都将在提交时发送,因为只有1个输入才会发送。在SampleEmp.save(myForm)中,您将使用“myForm.project”访问您的projectId。我建议您在$scope.save()内控制台.log(myForm),以查看它在到达该位置时包含的内容。确定。但我基本上想发送一个值数组,也就是一个投影数组。那么在这种情况下我们该怎么办呢。是的,当我想在编辑员工模式下将这些值加载回文本框时,这可以正常工作吗。您是否打算从下拉列表中选择X次,然后将所选projectId(数组)发送到API?好的,让我解释一下。在系统中。可以有n个下拉列表。因此,每个下拉列表将有一个选择。因此,将有n个选择的值发送到要保存的服务器。所以我希望所有这些n值都存储在数组中并发送到服务器。有什么想法吗?
    var CreateCtrlEmp = function ($scope, $location, SampleEmp, SampleProj, SampleDes, sharedValues) {
    $scope.items = SampleProj.query({ q: $scope.query });
    $scope.itemsd = SampleDes.query({ q: $scope.query });
    $scope.save = function () {
        //issue over here
        $scope.item.ProjectId = [];
        SampleEmp.save($scope.item);
        $location.path('/emp');
    };};
    
    <form name="form" class="form-horizontal" ng-submit="save(myForm)" style="margin-left:220px;">
    
        <table cellpadding="10">    
            <tr>
                <td style="width: 270px;">
                    <div>
                        <div ng-controller="AlertDemoCtrl">
                            <alert ng-repeat="alert in alerts" type="alert.type" close="closeAlert($index)" ng-model="ProjectId[item]">
                        <ul style="list-style-type: none; margin-left: 0px;">
                            <li >
                                <!--data-ng-model="selectedProject[$index]"-->
                                <!--data-ng-model="test.ProjectId"-->
                                <!--<select data-ng-model="test.ProjectId" data-ng-options="test.ProjectId as test.ProjectName for test in items" id="Project">-->
                                <select ng-model="myForm.project" ng-options="test.ProjectId as test.ProjectName for test in items">
                                    <option>-- Choose a Project --</option>
                                </select>
                            <li>
                        </ul>
                    </div>
                </td>       
            </tr>
        </table>
        
    </form>
    
    $scope.save = function (myForm) {
        SampleEmp.save(myForm);
        $location.path('/emp');
    };