最佳实践:在控制器

时间:2017-09-28 07:38:06

标签: angularjs binding components

我正在将应用从1.4转换为1.6.6 我需要在控制器中使用绑定,以单向绑定方式传递元素 我正在尝试使用$ onInit访问控制器中传递的值,但它不起作用(当字符串值已经存在时,this.value未定义)。
我已经用问题解决了这个问题 1)OnInit和超时OR
2)OnChange 这是对的吗?有什么我想念的吗?是不是应该全部绑定在onInit内?有人写道,在某些情况下价值不可用......文件含糊不清我认为......为什么会这样?还有其他更优雅的解决方案吗?

我的HTML:

<gravatar value="$ctrl.contact.email" size="50" class="img-circle"></gravatar>

我的组件:

angular
  .module('app')
  .component('gravatar', {
    template: '<img src="http://www.gravatar.com/avatar/{{ $ctrl.value | gravatar }}?s={{$ctrl.size || 64}}" class="{{$ctrl.class}}">',
    controller: Gravatar,
    bindings: {
      value: '<',
      size: '@',
      class: '@'
    }
  });

我的控制器版本1和2:

this.$onInit = function () {
    var size = (this.size) ? this.size : 64;
    $timeout(function () {
      this.log.log($scope.$ctrl.contact);
    }, 0);

  };


 this.$onChanges = function (changesObj) {
    this.log.log(changesObj.value);
    if (changesObj.value.currentValue) {
      this.img = 'http://gravatar.com/avatar/' + this.md5(this.value) + '?s=' + this.size;
    }
  };

0 个答案:

没有答案