【问题标题】:AngularJS: directive uses separate scopes for template and controller/linkAngularJS:指令为模板和控制器/链接使用单独的范围
【发布时间】:2013-11-01 15:02:51
【问题描述】:

我正在尝试使用指令进行模板化,但不幸的是,每个指令似乎都为模板和控制器/链接功能设置了单独的范围。

plnkr 的示例:

<body ng-app="App">
    <h2>Directive with Isolating Scope</h2>
    <isolating some-value="isolated">{{someValue}}</isolating>

    <h2>Directive with Shared Scope</h2>
    <sharing some-value="shared">{{someValue}}</sharing>
</body>
var app = angular.module('App', []);

app.directive('isolating', function(){
  return {
    'restrict': 'E',
    'scope': {
      'someValue': '@'
    },
    'transclude': true,
    'template': '<div ng-transclude></div>',
    'link': function(scope, element, attrs){
      scope.someValue = attrs.someValue;
    }
  };
});

app.directive('sharing', function(){
  return {
    'restrict': 'E',
    'transclude': true,
    'template': '<div ng-transclude></div>',
    'link': function(scope, element, attrs){
      scope.someValue = attrs.someValue;
    }
  };
});

我在 Batarang 中看到的内容:(括号中的指令名称)

< Scope (002)
    < Scope (003)    <= (isolating) contains the isolated scope
    < Scope (004)    <= (isolating) contains the template scope
    < Scope (005)    <= (sharing)   contains the shared scope

如何将隔离范围 003 用于模板? Scope 004 似乎完全没有必要。

AngularJS 版本是 1.2.0-rc3。

【问题讨论】:

  • 好吧,看来我真的简化了我的例子太多了。在我的应用程序中,我嵌套了多个类似于上述指令的指令,并且希望在从同一指令添加新变量的同时传递父作用域的一部分,因为它们需要在更深的嵌套级别上。所以我真的需要将隔离的控制器/链接范围传递给被嵌入的部分并从那里访问它。

标签: javascript angularjs


【解决方案1】:

只需从两者中删除模板属性即可。

编辑:使用这个特定的模板,您应该注意,transclusion 会为从父级继承的隔离范围创建同级范围。文本将使用嵌入范围,因此它不知道隔离范围的值。

如果你在 DOM 中将 {{someValue}} 切换到 {{isolated}},你会看到我认为发生了什么。

【讨论】:

  • 抱歉,太简化了,无法发布问题而错过了。模板应该包含
    ,马上纠正我的问题。 // 完毕;发布问题时 div 丢失,在 plnkr 上可见
  • 好吧,我真的简化了太多。 :) 为我的问题添加了解释。有什么方法可以将作用域传递给被嵌入的部分?
  • 不幸的是没有 - 被嵌入的作用域与隔离作用域是分开的,隔离作用域仅从指令属性指定的父级获取其信息。
猜你喜欢
  • 2014-05-05
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
  • 2013-05-28
  • 2016-03-28
  • 2014-07-13
  • 2015-02-04
  • 1970-01-01
相关资源
最近更新 更多