【问题标题】:Get bound object value of angular component from its controller从其控制器获取角度组件的绑定对象值
【发布时间】:2017-04-12 17:30:42
【问题描述】:

我有一个角度分量:

module.exports = {
    bindings: {
        vulnerability: '<',
    },
    controller: ['$scope', function($scope){
       //want to get value of vulnerability from above
       $scope.vulnerability  // doesn't work
    }],
};

我在 ng-repeat 中引用的

<div ng-repeat="vulnerability in vulnerabilities" class="vulnerability-item">
   <vulnerability-item  vulnerability="vulnerability"> </vulnerability-item>
</div>

一旦指令被调用,漏洞的值就不会改变,所以我不需要观察那个值,只是在它被设置后引用它。

我确实在属性上放了一个$scope.$watch,只是为了看看它是否有效并且它确实触发了,但我在手表的处理程序中看不到新的或旧的值,所以无论如何它对我没有帮助。

我尝试了$scope.vulnerability$ctrl.vulnerability,这是我在指令模板中引用该属性的方式,但均未奏效。如何获取传入的绑定值?

添加此手表:

    $scope.$watch('vulnerability', function (oldV, newV) {
        console.log('old', oldV)
        console.log('new', newV)
    })

我在控制台中为组件的每个实例获得了一个 new undefinedold undefined,尽管如果我将 $scope.$watch('vulnerability' 更改为 $scope.$watch('nonsense') 它仍然会为每个组件触发一次日志。

【问题讨论】:

  • 请更新问题并尝试使用$scope.$watch。对于 1.5 和组件,$onChanges 钩子更可取。
  • 正如我所提到的,我对观察变化的价值没有兴趣。有没有办法直接从控制器获取该值?

标签: angularjs angularjs-scope angular-components


【解决方案1】:

如果不应该更改该值,则应绑定一次,vulnerability="::vulnerability"。这为问题提供了上下文(也节省了一些优化时间)。

在这种情况下可以使用$onInit 钩子:

...
controller: function() {
   this.$onInit = function () {
     this.vulnerability
   }
},

【讨论】:

  • 原来是它需要在this 上引用,而不是$scope,如控制器内的this.vulnerability 中的this.vulnerability 你能改变你的答案,并详细说明vulnerability="::vulnerability" 和生病吗接受它
  • 好的。至于一次性绑定,请参阅docs.angularjs.org/guide/expression#one-time-binding。尽可能使用它们是一个好习惯,它为代码提供了适当的上下文,并在初始优化方面做得很好。
猜你喜欢
  • 2018-03-05
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
相关资源
最近更新 更多