【问题标题】:How to change one-time binding data in AngularJS?如何更改 AngularJS 中的一次性绑定数据?
【发布时间】:2017-05-18 19:15:44
【问题描述】:

我有一个 div,其中显示诸如 手机号码、姓名等之类的详细信息,例如 {{::mobilenumber}}, {{::name}}

在那个 div 中,有一个按钮可以在新表单中呈现相同的值

通过使用表单中的按钮,用户可以更改值,但在我显示详细信息的 div 中,单击按钮后值不会更改

<form ng-submit="form.$valid && saveDetails()">
  <input type="text" class="form-control capitalize" placeholder="Full Name" name="fullname"ng-model="address.fullname" maxlength="50"  ng-trim="true" autocomplete="off" required >
  <span><!-- Mobile Number required --></span>

  <input type="text" class="form-control capitalize" placeholder="Mobile Number" name="mobilenumber" id="mobilenumber"                        ng-model="address.mobilenumber" ng-minlength="10" maxlength="12"  ng-trim="true" autocomplete="off" required>
  <span><!-- Mobile Number required --></span>

  <button ng-click="form.submitted=true><span>Update User Details</span</button>
</form>

我只想使用单向绑定吗?

我尝试使用$scope.$broadcast('$$rebind:refresh');,但值仍然没有改变。

任何帮助或指导都会对我很有帮助。

【问题讨论】:

  • 请显示你的html
  • 值不会改变,因为您使用一次性绑定 (::mobilenumber),因此不会更新到任何新数据。看来要更新了,为什么要一次性绑定呢?
  • @Maximus 我已经写过
  • 实际上我只想在用户更新表单时在 div 中显示我的更新数据,否则在单击更新表单的按钮之前它不应该更新
  • 不想一次性绑定,为什么要使用一次性绑定?

标签: javascript html angularjs model-view-controller one-time-binding


【解决方案1】:

如果你真的想保持某种单向绑定...

您可以做的只是使用两种方式绑定,但在两者之间使用数据集。它会产生一些开销,但它可能是解决您的问题的方法。为了更新视图,您只需更新复制的数据。您可以控制视图中的数据何时更新。

【讨论】:

    【解决方案2】:

    当您在 html 中使用插值 {{mobilenumber}} 时,Angular 会创建一个观察者来观察范围内的属性 mobilenumber

    $scope.$watch('mobilenumber', function() {
       // update DOM
    });
    

    只要值发生变化,DOM 就会更新。

    但是,如果你使用一次性绑定{{:mobilenumber}},一旦你的回调接收到真值,Angular 就会移除观察者:

    var unwatch = $scope.$watch('mobilenumber', function() {
       if (value) {
         // update DOM
         unwatch();
       }
    );
    

    由于没有更多的 mobilenumber 观察者,每当您在 saveDetails() 方法内更新范围内的值时,都不会触发回调并且不会更新 DOM。

    如果您计划不断更新值,则不应使用一次性绑定。使用常规绑定:

    <div>{{mobilenumber}}</div>
    

    【讨论】:

    • 实际上我只想在用户更新表单时在 div 中显示我的更新数据,否则在单击更新表单的按钮之前它不应该更新。那么有没有其他方法可以做到这一点?
    • @VIKASKOHLI,请看我更新的答案,如果有什么不清楚的可以join the chat
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2017-01-28
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    相关资源
    最近更新 更多