当前位置:  开发笔记 > 编程语言 > 正文

嵌套 - 被抄送的项目 - 范围澄清?

如何解决《嵌套-被抄送的项目-范围澄清?》经验,为你挑选了0个好方法。

我已经知道transclusion是如何工作的(仅在第一级我猜),我对嵌套的transcluded项的范围有疑问.

好的,我有这个代码:


  
    
      

Hello , The value of "i" is => {{i}}

基本上我有一个controller,.

myTabs指令:

  .directive('myTabs', function()
  {
      return {
          restrict: 'E',
          transclude: true,
          scope:
          {},
          controller: ['$scope', function($scope)
          {
              $scope.i = 2;
          }],
          template: '
' }; })

我知道该指令的内容可以访问外部指令的范围

因此黄色部分将可以访问外部作用域(这是主控制器作用域):

在此输入图像描述

这是myPane指令的代码:

  .directive('myPane', function()
  {
      return {
          require: '^myTabs',
          restrict: 'E',
          transclude: true,
          scope:
          {
          },
          controller: function($scope)
          {
              $scope.i = 4; //different value
          },
          template: '
' }; })

该计划始于:

.controller('ctrl', function($scope)
{
    $scope.i = 1000;
})

该计划的输出是:

您好,"i"的值=> 1000

根据文档:myPane'stranscluded数据应该可以访问指令的外部范围,该指令是myTabs具有该值的指令i=2.

但是myPane有一个隔离的范围,以便它不是继承的范围myTabs.

所以,做它去一个水平更加高到控制器的范围,以获得i=1000(澄清,我不是在问我怎样才能i获得另一个价值 - 我在问为什么/它如何具有1000的价值).

我的意思是范围的层次结构在这里看起来如何?

是这样的吗?

         controller's scope
                |
       +--------+---------+
       |                  |
  myTabs's             mypanes's
 transcluded           transcluded 
 data's scope          data's scope         

文档说:

transclude选项更改范围嵌套的方式.它使得transcluded指令的内容具有指令之外的任何范围,而不是内部的任何范围.这样做,它使内容访问外部范围.

但是myPAne指令的范围有多大?

换句话说,为什么/ 怎么样i=1000

完整的PLUNKER

在回答后编辑OP

安装和配置PeriScope后(来自@MarkRajcok)我现在可以直观地看到它:

在此输入图像描述

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有