我想两个绑定一个指令的范围,它似乎只有一种方式绑定?

I'd like to two bind a directive's scope, it appears its only one way bound?

我想做的很简单:两种方式绑定一个指令的范围。这意味着给定一个带有 $scope.name='Foo' 的父控制器 ParentCtrl 和一个带有 scope: {name: '='} 的指令,我希望当我从指令的 link 函数中更改 scope.name='Bar'$scope.name='Bar' 来自给定指令的控制器我希望 ParentCtrl 的模板会反映新的 $scope.name,否则它只是从父范围绑定到指令范围的一种方式。不幸的是,这不是我得到的。我在这里错过了什么吗?这是一个 plunker link 说明了这个问题:

http://plnkr.co/edit/VeGvWV2AGftFHF0LhnBY?p=preview

代码:

angular.module('docsSimpleDirective', [])
  .controller('ParentCtrl', ['$scope', function($scope) {
    $scope.name = "Bernie Sanders";
    $scope.occupation = "Arsonist";
  }])
  .directive('myCustomer', function() {
    return {
      template: 'Name: {{name}} Occupation: {{occupation}}',
      scope: {
        name: '=',
        occupation: '='
      },
      link: function(scope, element, attrs) {
        scope.name = "Donald Drumpf";
        scope.occupation = "Fascist pig";
        scope.$apply();
      }
    };
  });

模板:

<body ng-app="docsSimpleDirective" ng-controller="ParentCtrl">
  Name: {{name}}, Occupation: {{occupation}}<br />  

  <div ng-controller="ParentCtrl">
    <div my-customer name="name" occupation="occupation"></div>
  </div>
</body>

问题是您有多个 ParentCtrl 实例,第一个在主体上,然后在内部 div.

之一上

因此,当您在范围变量上声明 name 时,您将其声明为原始类型,因此内部控制器中的重写值将简单地具有对 $scope.name 值的新引用。只有在 objects 不是原始类型变量的情况下才会遵循原型继承。

在页面上定义 ng-model 时,您应该遵循 dot rule

也不需要 运行 摘要指令内部循环 link 函数。这最终会引发错误。请从那里删除它。