javascript - 与对象 angularjs 组件绑定(bind)的一种方式

标签 javascript angularjs

嘿,我正在尝试从 Controller 以 json 对象的形式传递一些数据 对于组件,我使用“<”注释并监听 $onChanges 方法中字段的更改。

但显然, Angular 感知只有一个变化,尽管我使用 interval 每 2 秒更新一次字段(当前组件的数据字段)。 我尝试使用“=”注释,但无法使用 $onChanges 事件监听对象的更改。 那么我能做些什么来解决这个问题呢?也许我正在做一些不正确的事情。

var app = angular.module("app",[]);
app.component('heroDetail', {
  template: '<span>Name</span>',
  controller: HeroDetailController,
  bindings: {
    data: '<'
  }
});

function HeroDetailController(){
  this.$onChanges = function(changes){
    console.log("changes",changes);
  }
}

app.controller('mainController',function($scope,$interval){
    trendData = {
        Load: [],
        AVGTemperature: [],
        IR: [],
        Acoustic: []
    }
  $interval(function () {
        for (var key in trendData) {
            trendData[key] = [];
            trendData[key].push((new Date()).getTime());
            trendData[key].push(Math.round(Math.random() * 100));
        }
        console.log("$scope.trendData",$scope.trendData)
        $scope.trendData = trendData;
    }, 2000);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div ng-app="app" ng-controller="mainController">
  <hero-detail data="trendData"></hero-detail>
</div>

最佳答案

在组件架构中,在组件之间传递数据的常见方式是不改变数据,但始终使用新引用创建新的复制结构。这是监视应用程序中数据流的唯一方法,因为检查某些内容是否发生更改的最简单、最有效的方法是仅检查引用,而不深入检查对象中的每个属性,而这正是组件生命周期正在做的事情。

我必须提到,变异对象将刷新子对象的范围,但不会作为组件生命周期的变化进行监视。因此摘要循环会看到对象的变化,但组件生命周期不会捕获这些变化。

为了修复您的示例代码以确保所有更改都由 $onChanges 监控,我们需要在每次更改时创建新的数组副本。看看:

$interval(function () {

    var trendData=$scope.trendData.slice(); //create copy of array
    for (var key in trendData) {
        trendData[key] = [];
        trendData[key].push((new Date()).getTime());
        trendData[key].push(Math.round(Math.random() * 100));
    }
    $scope.trendData = trendData; //we are setting new reference to copied array
}, 2000);

关于javascript - 与对象 angularjs 组件绑定(bind)的一种方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41244727/

相关文章:

javascript - 查找 ID 数组,并将它们映射到单独模式中的项目数组

javascript - 如何在 Phonegap 应用程序中查找内存泄漏

javascript - 如何使用 ng-if 显示或隐藏输入字段?

javascript - 使用html在不同的屏幕分辨率下显示不同的提示信息

angularjs - 什么时候可以在 AngularJS 中的 $rootScope 上存储对象

javascript - 如何使用 npm 在 ES6 中导入 moment.js?

javascript - 调整浏览器窗口大小时,addEventListener 'resize' 不会触发

javascript - 带有正文溢出的 Firefox CSS 转换 :hidden

javascript - 创建链接 - Knockout.js

javascript - highcharts 值不适合容器