首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角1.x在指令模板体中消耗外部范围

角1.x在指令模板体中消耗外部范围
EN

Stack Overflow用户
提问于 2016-06-21 13:07:08
回答 2查看 58关注 0票数 0

给定具有隔离作用域的第三方指令tpd (为参数起见,关闭源),以下面的标记为例:

代码语言:javascript
复制
<div>
    <tpd>
        <div>{{tpdScopeField}}</div>
        <div>{{outerScopeField}}</div>
    </tpd>
    <div>{{outerScopeField}}</div>
</div>

这将输出与以下类似的内容:

代码语言:javascript
复制
<div>
    <tpd>
        <div>tpdScopeFieldValue</div>
        <div></div>
    </tpd>
    <div>outerScopeFieldValue</div>
</div>

如何有效地与标记中的外部/父范围进行通信?

另一个例子是尝试调用外部作用域的函数(something事件):

代码语言:javascript
复制
<div>
    <tpd>
        <button ng-click="outerScopeEventHandler(someArgs)">Click me!</button>
    </tpd>
    <div>{{outerScopeField}}</div>
</div>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-21 13:11:54

如果属性在父级中可用,则此代码将执行以下操作:

代码语言:javascript
复制
<div>
    <tpd>
        <div>{{tpdScopeField}}</div>
        <div>{{$parent.outerScopeField}}</div>
    </tpd>
    <div>{{outerScopeField}}</div>
</div>

类似地,$parent.functionToCall(args)将调用父作用域方法。

票数 1
EN

Stack Overflow用户

发布于 2016-06-21 13:24:54

也许你可以用$parent来做这个。但我认为你不应该用$parent做这件事。如果该指令tpd是第三方指令,则应该使用装潢工

您可以使用装饰器来修改它。例如,可以向该指令添加另一个属性。并且可以从父$scope传递自定义数据。

我说了这些。因为使用$parent是一个反模式和不良架构的标志。

__

除了您的注释之外,如果新的孤立作用域是由于ngIf造成的,则可以为您的$parent作用域使用控制器。

__

一个装饰师的例子;

代码语言:javascript
复制
angular.module('yourApp')
  .config([ '$provide', function($provide) {
    $provide.decorator('tpd', ['$delegate', function($delegate) {
      var directive = $delegate[0];

      angular.extend(directive.scope, { 
          othervar: "=" 
      }); 

      return $delegate;  
    }]);
  }]);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37945333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档