【问题标题】:Angularjs- keeps data of nonexistent dom element (ngIf=false)Angularjs- 保留不存在的 dom 元素的数据(ngIf=false)
【发布时间】:2014-07-06 09:40:00
【问题描述】:

我的表单对每种类型都有不同的字段:

<form>
    <select ng-model="message.type">
         <option>SMS</option>
         <option>Email</option>
    </select>

    <div ng-if="message.type=='sms'">
         <textarea ng-model="message.body"></textarea>
    </div>

    <div ng-if="message.type=='email'">
         <input type="text" ng-model="message.subject" />
         <textarea ng-model="message.body" class="ckeditor"></textarea>
    </div>
</form>

当用户首先选择电子邮件,在主题字段中写一些东西,然后改回短信类型,然后当我在 $http.post 中发送消息对象时,它会发送带有主题子项的对象,甚至虽然 dom 元素被删除了。

我该如何解决?我只想发送链接到现有 dom 元素的数据。

谢谢

【问题讨论】:

  • 快速破解应该使用相同的名称,即 message.body,而不是服务器端发送类型,这样你就有了做事的方法。

标签: javascript angularjs dom forms angular-ng-if http-post


【解决方案1】:

我可以想象几种解决方案:

删除不合适的属性

您可以在所选选项更改时执行此操作:

$scope.deleteInappropriateAttribute = function () {
    if ($scope.message.type !== 'email') {
        delete $scope.message.subject;
    }
};
<select ng-model="message.type" ng-change="deleteInappropriateAttribute()">
     <option>SMS</option>
     <option>Email</option>
</select>

最好在您发布表单之前执行此操作,以免在用户频繁在不同选项之间切换时强制用户重写message.subject

将不同的变量关联到表单的每个部分

<form>
    <select ng-model="message.type">
         <option>SMS</option>
         <option>Email</option>
    </select>

    <div ng-if="message.type=='sms'">
         <textarea ng-model="message.global.body"></textarea>
    </div>

    <div ng-if="message.type=='email'">
         <input type="text" ng-model="message.email.subject" />
         <textarea ng-model="message.global.body" class="ckeditor"></textarea>
    </div>
</form>

然后,只发布适当的变量:

$http.post(
    'myUrl.php',
    angular.extend(
        {},
        $scope.message.global,
        $scope.message[$scope.message.type]
    )
);

【讨论】:

  • 我想过这个问题,但是当你有更多的字段时,其中一些是动态的(为了这篇文章,我简化了表格),它变得复杂了。 有没有更好的方法?我一直认为 ng-show 会保留数据,而 ng-if 会删除它。
  • 它删除了 DOM 和本地范围,是的,但是这里,message 是在 form 的范围内定义的。我提出了另一种解决方案,看看吧!
猜你喜欢
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
  • 2011-09-22
相关资源
最近更新 更多