2013-11-01 49 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

相關問題