【问题标题】:ng-model inside ngSwitch doesn't workngSwitch 中的 ng-model 不起作用
【发布时间】:2016-08-19 12:00:59
【问题描述】:

我有以 JSON 格式向服务器发送计算值的表单。 但我不明白为什么只有 ngSwitch 内部的 ng-model 不发送 JSON 数组。 我认为 ng-model 应该使用 $parent 在 ngSwitch 中工作。 但似乎 angular 还需要更多的东西。

这是我的表格

    <form ng-app="SaunaDoorCalc" ng-controller="SaunaDoorCalcController" class="calculator" name="calculator">

....
<tr><td>Result</td> 
    <td ng-switch-default ng-model="$parent.doorsize">@{{selectedSizeSwitch}}, @{{selectedStandardSize.label}}</td>
    <td ng-switch-when="non-standard" ng-model="$parent.doorsize">@{{selectedSizeSwitch}}, @{{DoorSizeB}}x@{{DoorSizeH}}</td>   
    <td ng-switch-default ng-model="$parent.baseprice">@{{selectedStandardSize.price}}</td>
    <td ng-switch-when="non-standard" ng-model="$parent.baseprice">@{{DoorSizeB*DoorSizeH*5000/1000000}}
    </td>
</tr>

....

</form>

还有我的剧本

angular
  .module('SaunaDoorCalc',[])
    .controller('SaunaDoorCalcController', function($scope, $http) {

    $scope.outerScope = {};
    $scope.formData = {};

    .....

    $scope.submit = function(isValid) {
      if (isValid) {
          $http.post($scope.url, 
            {
              "calcname": "saunadoor", 
              "doorsize": $scope.doorsize, 
              "baseprice": $scope.baseprice, 
              "glass": $scope.selectedGlass, 
              "korobka": $scope.selectedKorobka, 
              "petli": $scope.selectedPetli, 
              "dekor": $scope.selectedDekor, 
              "dostavka": $scope.selectedDostavka,
              "montazh": $scope.montazh, 
              "name": $scope.name, 
              "tel": $scope.tel, 
              "email": $scope.email, 
              "msg": $scope.msg, 
            }).
                        success(function(data, status) {
                            console.log(data);
                            $scope.status = status;
                            $scope.data = data;
                            $scope.result = data; 
                        });
              $scope.name = null;
              $scope.tel = null;
              $scope.email = null;
              $scope.msg = null;
              $scope.DoorSizeB = null;
              $scope.DoorSizeH = null;
              $scope.calculator.$setPristine();
              $scope.message = 'Заказ отправлен. В ближайшее время мы с вами свяжемся.'; 

            }else{
              $scope.message = 'Заполните обязательные поля формы!'; 
            }

        }

  });

【问题讨论】:

    标签: angularjs json ng-switch


    【解决方案1】:

    ng-model 不绑定到 td 元素,您应该改用 ng-bind

    https://docs.angularjs.org/api/ng/directive/ngModel

    ngModel 指令使用 NgModelController 将输入、选择、文本区域(或自定义表单控件)绑定到范围上的属性,该属性由该指令创建和公开。

    【讨论】:

    • 这样做 &lt;td ng-switch-default ng-bind="$parent.doorsize"&gt;@{{selectedSizeSwitch}}, @{{selectedStandardSize.label}}&lt;/td&gt; 并不能解决问题,我期望在变量 doorsize 中获取计算值 {{selectedSizeSwitch}}, {{selectedStandardSize.label}},然后在 JSON 数组中发送 $scope.doorsize
    • 当您使用ng-bind 时,它会将元素内的文本替换为属性ng-bind 中的变量值,即&lt;b ng-bind="val"&gt;123&lt;/b&gt; 将输出val 而不是123跨度>
    • 所以使用&lt;td ng-switch-default ng-bind="$parent.doorsize"&gt;@{{selectedSizeSwitch}}, @{{selectedStandardSize.label}}&lt;/td&gt;会显示$parent.doorsize的值
    • 任何你正在做的计算,你需要在你的 javascript 代码而不是你的标记中进行,ng-model 是一种使用two-binding 的方式,这意味着我可以给一个输入元素一个@987654337 @变量,当我改变输入的值时,是否会改变模型的值
    • ng-bindone-way绑定,不能通过dom改变变量的值,它只会在每个digest周期计算并输出到dom
    猜你喜欢
    • 1970-01-01
    • 2015-12-22
    • 2016-09-12
    • 1970-01-01
    • 2019-08-06
    • 2018-08-29
    • 1970-01-01
    • 2016-12-25
    相关资源
    最近更新 更多