【问题标题】:OnsenUI AngularJS data binding not working properlyOnsenUI AngularJS 数据绑定无法正常工作
【发布时间】:2016-05-16 13:48:50
【问题描述】:

我创建了一个简单的示例来说明我将要做什么:

ons.bootstrap()
  .controller('AppController', function($scope) {
    $scope.x = 0;
    setInterval(function() {
      $scope.x = $scope.x + 1;
    }, 500)
  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/onsen/1.3.15/js/onsenui.min.js"></script>

<ons-page ng-controller="AppController">
  <ons-list>
    <ons-list-header>Switch</ons-list-header>
    <ons-list-item>
      <br/>
      This value should change every 500 milisecond: {{ x }}
      <br/>
    </ons-list-item>
    <ons-list-item>
      <div class="center">
        Switch is {{ switch ? 'on' : 'off' }}
      </div>
      <div class="right">
        <ons-switch ng-model="data.switch"></ons-switch>
      </div>
    </ons-list-item>
  </ons-list>
</ons-page>

作为一个普通的 Angular(使用two-way data binding)应用程序,控制器中的任何更改都会导致视图更新,反之亦然。 但结合OnsenUI 视图更新仅在一个温泉组件更改更新视图时发生。有什么方法可以告知温泉发生的事情(需要查看更新)。

【问题讨论】:

  • 使用$interval服务代替setInterval()函数

标签: javascript angularjs cordova onsen-ui 2-way-object-databinding


【解决方案1】:

这样试试

ons.bootstrap()
.controller('AppController', function($scope) {
 $scope.x = 0;
  setInterval(function() {
   $scope.$evalAsync(function () {
                $scope.x = $scope.x + 1;
            });

 }, 500)
});

编辑:

或者使用$interval 就像@Pankaj Parkar 所说的那样。在使用$interval 之前,你应该在你的控制器中注入这个服务。

 $interval(function () {
   $scope.x = $scope.x + 1;               
 }, 500);

【讨论】:

  • 为什么不$interval?而不是在setInterval 中包含$evalAsync
  • 我认为$evalAsync 的性能优于$interval。可能!
  • @evalAsync 不会更快,AFAIK $applyAsync(angular 1.3+) 会表现良好.. 理想的正确解决方案是仅使用 $interval..
  • 看这篇文章bennadel.com/blog/…
猜你喜欢
  • 2017-07-03
  • 2015-11-18
  • 1970-01-01
  • 2015-09-28
  • 2015-12-02
  • 1970-01-01
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多