2013-11-01 48 views
0

单独的范围我想使用的模板的指令,但不幸的是每个指令出现设置模板和控制器/链接功能的个人范围。在plnkrAngularJS:指令使用模板和控制器/链接

例子:

<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的模板?范围004似乎完全没有必要。

AngularJS版本是1.2.0-rc3。

+0

好的,好像我真的简化了我的例子太多了。在我的应用程序中,我嵌套了与上述类似的多个指令,并希望传递父级作用域的某些部分,同时从相同的指令中添加新变量,因为它们在更深的嵌套级别上是必需的。所以我真的需要将隔离的控制器/链接范围传递给transcluded部分并从那里访问它。 – Energiequant

回答

0

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

编辑:使用这个特定的模板,你应该注意到,transclusion创建了一个兄弟范围到从父类继承的隔离范围。文本将使用transcluded作用域,所以它不知道隔离作用域的值。

如果您在DOM中将{{someValue}}切换为{{isolated}},您将看到我在想什么。

+0

对不起,简化了太多的问题并错过了。模板应该包含

,在一分钟内纠正我的问题。 //完成;发布问题时,divs丢失了,在plnkr上可见 – Energiequant

+0

嗯,我真的把它简化得太多了。 :)添加了一个解释我的问题。有没有办法将范围传递给transcluded部分? – Energiequant

+0

不幸的是,不包含 - transcluded作用域与isolate作用域是分开的,它们只从指令属性指定的父级作用域获取其信息。 – BahamutWC

相关问题