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

时间:2016-03-17 22:02:06

标签: javascript angularjs angularjs-directive angularjs-scope prototypal-inheritance

我想做的事情非常简单:双向约束指令的范围。这意味着给定一个带有ParentCtrl的父控制器$scope.name='Foo'和带有scope: {name: '='}的指令我希望当我从指令的链接中更改scope.name='Bar'时来自给定指令控制器的函数或$scope.name='Bar'我希望ParentCtrl的模板能反映新的$scope.name,否则它只能从父范围绑定到指令的范围。不幸的是,这不是我得到的。我在这里错过了什么吗?这是一个说明问题的插件链接:

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>

1 个答案:

答案 0 :(得分:3)

问题是你有ParentCtrl的多个实例,第一个是在身体上,然后是在内部div之一。

因此,当您在范围变量上声明name时,您将其声明为基本类型,因此在内部控制器内覆盖值将简单地为$scope.name值提供新的引用。原型继承仅在objects不在原始类型变量的情况下才会出现。

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

也无需在指令链接功能中运行摘要循环。这最终会引发错误。请从那里删除。