javascript - $onChanges 不会更新组件初始化时的值

标签 javascript jquery html angularjs

嘿,我有一个组件,它有两个绑定(bind)值:负载和最大值。 我使用值初始化 $onInit 方法中的负载和最大值:

负载:0 最大:300。

然后我使用 $onChange 循环更改了组件的值,需要将 load 的值更新为 100。

但这并没有发生,我只获得了 $onInit 中设置的初始化值,而不是 $onChanges 中设置的最后一个值。 我可以使用 console.log 看到该值已更新,但我在 UI(组件模板)上看不到它。

有人可以向我解释一下问题是什么以及如何解决吗?

这是我正在谈论的代码: http://codepen.io/Barak/pen/JEVWbO

<div ng-app="app" ng-controller="mainCTRL">
  <load load="loadData" max="maxData"></load>
</div>

var app = angular.module("app",[]);

app.controller("mainCTRL",function($scope){
  $scope.loadData = 100;
  $scope.maxData  = 500;
})
app.component("load",{
    template:'<div><span>{{$ctrl.load}}</span> <span>{{$ctrl.max}}</span></div>',
    controller: loadController,
    bindings: {
        load: '<',
        max: '<'
    }
})

function loadController(){
  var self = this;
  self.$onInit  = function(){
    self.load = 0;
    self.max = 300;
  }

  self.$onChanges = function(changes){
    self.load = changes.load.currentValue;
    console.log('onChanges self.load',self.load);
   }

}

最佳答案

$onInit() 在所有绑定(bind)初始化后调用。这意味着在您的 $onInit 方法中,self.load 已设置为 100,并且您用 0 覆盖它。尝试:

  self.$onInit  = function(){
    self.load = self.load || 0;
    self.max = self.max || 300;
  }

还有一件更有趣的事情:$onChanges$onInit 之前调用。这是一个讨论why

关于javascript - $onChanges 不会更新组件初始化时的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42276378/

相关文章:

javascript - 如何在 Node.js 中的主进程和子进程之间传递流输入/输出

jquery - Bootstrap 4 模态 - 单击按钮但模态不显示

html - 如何在页面和固定菜单之间水平居中主 div。使用骨架

javascript - 面向非 JavaScript 用户的编程

javascript - Google Maps API 检查标记是否存在于多个边界

javascript - 悬停时更改 div 内的图片(带边框)

javascript - 如何使 JQuery UI 布局插件在 Bootstrap body-content div 中工作

html - 修复了滚动列表顶部的标题。所有列高度相同的 Flex 布局

javascript - fusion-tables,需要帮助从表中获取最新数据并将其插入 map 代码中

javascript - 浏览器嗅探用户的历史 - 就此结束?