一种以角度方式绑定到对象的方法

Nic*_*lin 3 javascript angularjs

我想在指令的属性之间进行单向(非一次)绑定,但我正在努力解决如何在没有指令的情况下表达这一点attrs.$observe.我现在能想出的最好的方法是绑定&attr并调用我在模板中绑定的变量,例如{{attr()}}

app.controller('MainCtrl', function($scope) {
  $scope.names = ['Original'];
  setTimeout(function () {
    $scope.names.push('Asynchronously updated name');
    $scope.$apply();
  }, 1000);
});

app.directive('helloComponent', function () {
  return {
    scope: {
      'names': '&names'
    },
    template: '<li ng-repeat="name in names()">Hello {{name}}</li>'
  }
});
Run Code Online (Sandbox Code Playgroud)

 <body ng-controller="MainCtrl">
    <ul>
      <hello-component names="names"/>
    </ul>
  </body>
Run Code Online (Sandbox Code Playgroud)

Plunker

有没有更好的方法来保留单向绑定而不需要调用绑定属性?

编辑

我已经更新了示例代码,以阐明我想绑定到一个对象,而不仅仅是一个字符串.所以@attr(使用字符串属性)不是解决方案.

New*_*Dev 5

"&"实际上是正确的做法.我已经反对这种方法(使用@JoeEnzminger,在这里这里),因为它在语义上是有问题的.但整体Joe是对的 - 这是创建单向绑定到实际对象的方式,而不是"@"绑定到字符串.

如果您不喜欢隔离范围,那么您可以使用$parse以下方法获得相同的效果:

var parsedName = $parse(attrs.name);
$scope.nameFn = function(){
  return parsedName($scope);
}
Run Code Online (Sandbox Code Playgroud)

并在模板中使用它:

"<p>Hello {{nameFn()}}</p>"
Run Code Online (Sandbox Code Playgroud)