2014-01-15 72 views
0

問:

爲什麼導致空{{ name }}

Plunker:

http://plnkr.co/edit/32t8u4VL9BiuhHcC80LF?p=preview

腳本:

var app = angular.module('app', []); 

app.controller('MainCtrl', function($scope) { 
    $scope.name = 'World'; 
}); 

app.directive('portal', function() { 
    return { 
    restrict: 'E', 
    transclude: true, 
    template: '<div><span>Header</span><div ng-transclude></div><span>Footer</span></div>' 
    } 
}) 

HTML:

<portal ng-app="app" ng-controller="MainCtrl"> 
    <p>Hello {{ name }}, let's see if Angular is working at all... 1 + 2 = {{ 1 + 2 + '!' }}</p> 
</portal> 

回答

2

放置ng-appmg-controller在父<div/>和預期的事情很快就會過去。

<div ng-app="app" ng-controller="MainCtrl"> 
    <portal> 
     <p>Hello {{ name }}, let's see if Angular is working at all... 1 + 2 = {{ 1 + 2 + '!' }}</p> 
    </portal> 
</div> 
+0

可以告訴我爲什麼我需要這樣做 - 這就是爲什麼你不能在同一個元素中使用ngApp和ngController的ngTransclude指令? –

+1

不是我的頭頂,但我的猜測是該指令如何與ngTransclude作用域。我個人從未在自定義指令中看到過'hg-app',因爲文檔建議在整個角度應用程序的父級上使用'hg-app'。 –

+0

是的,我知道Angular的建議。只是因爲我有多個命名衝突的SPA,並且角度既不提供命名空間,也不提供模塊的動態加載和卸載,而且我在這些站點之間有共同的內容,所以我決定可以使用指令將每個「應用程序」和頁腳。爲了方便起見,我想在上述指令的同一個元素上加上'ngApp'。謝謝你的幫助! –

1

將門戶網站更改爲div,您會發現它是您的指令無效,而不是您的控制器。

這工作:

<div ng-app="app" ng-controller="MainCtrl"> 
    <portal> 
     <p>Hello {{ name }}, let's see if Angular is working at all... 1 + 2 = {{ 1 + 2 + '!' }}</p> 
    </portal> 
    </div> 
+0

稍微晚一點編輯;馬克擊敗你:P –

+1

我看到了 - 29秒。 :) –

相關問題