如何避免在同一个对象上添加许多观察者

时间:2017-06-22 13:28:45

标签: angularjs performance angular-formly

目前我从服务器得到一个非常混乱的响应,并且如果将所有内容存储在一个Object中,然后将其作为模型绑定在formly-form上,那么在输入文本输入时会有很大的延迟。这是因为有3个数组,超过850个项目,据我所知,Angular Formly也会观察这些事情。

所以我决定将数据拆分为2个对象

  • 一个包含所有内容并且没有作为模型绑定到formly-form
  • 的内容
  • 其他包含非常轻量级的初始数据,并将这些数据绑定到formly-form模型。

这是骨架:

$scope.allData = {}
$scope.formlyData = {}

$scope.initData = function() {
  myService.get()
     .then(function(response) {
       $scope.allData = response.data
       $scope.formlyData['important'] = response.data.important
     })
}

还记得巨大的阵列吗?好吧,基本上他们应该存储在选择输入中,并且形式上我试图使它像这样:

var vm = $scope

$scope.formFields = [{
  fieldGroup: [
    {
      'key': 'actors',
      'type': 'select',
      'className': 'col-sm-6',
      'templateOptions': {
        options: []
      },
      controller: function($scope) {
        $scope.to.options = vm.allData.actors
      }
    }
  ]
}]

这不起作用,因为allData在执行时为空,而后来由于$http调用异步而填充。

好的,我尝试使用观察者:

var vm = $scope;

$scope.formFields = [
  fieldGroup: [
    {
      'key': 'actors',
      'type': 'select',
      'className': 'col-sm-6',
      'templateOptions': {
        options: []
      },
      controller: function($scope) {
        vm.$watch('allData', function(newVal) {
          $scope.to.options = newVal.actors
        })
      }
    }
  ]
]

但事情并不好,加载需要很长时间(响应时间为200毫秒)。这是因为我有大约10个具有相同行为的字段,然后在同一个对象上有很多观察者?

有任何更好的想法来处理这种情况或改进吗?感谢。

0 个答案:

没有答案