2013-09-21 65 views
13

我想將一些數據放在我的指令創建的範圍中。這是我的jsFiddle使用控制器的指令中的angularjs控制器無法工作?

下面的代碼工作得很好

.directive('directive1', function() { 
    return: { 
     scope: true, 
     controller: function ($scope) { 
      $scope.name = 'world'; 
     } 
    } 
}) 

<div directive1> 
    <p>{{ name }}</p> 
</div> 

但這些代碼不工作

.directive('directive2', function() { 
    return: { 
     scope: true, 
     controller: function() { 
      this.name = 'world'; 
     }, 
     controllerAs: 'testCtrl' 
    } 
}) 

<div directive2> 
    <p>{{ testCtrl.name }}</p> 
</div> 

這有什麼錯在我的代碼?還是我誤解了controllerAs

+0

我不知道你是否可以這樣做。你定義了沒有'$ scope'的控制器。什麼是'controllerAs'? –

+1

@MaximShoustin [angular1.2 docs](http://docs.angularjs.org/guide/directive),指令 – user2331095

+1

的新功能知識:) –

回答

16

ControllerAs支持指令was added in 1.2.0,因此您必須使用最新版本,而不是鏈接的小提琴中的1.0.2This way它像你想要的那樣工作。

+0

您是對的。遷移到角1.2後,它運行良好。謝謝〜! – user2331095

-1

請不要混淆指令控制器和一個正常的控制器!所以是的,一個directve可以有一個控制器,它控制着一些東西。但它不等同於一個正常的控制器!

將指令邏輯放入指令控制器實際上沒有問題,但實際上指令控制器用於交叉指令通信。一個指令的控制器實例可以注入到位於相同元素(或子元素)上的另一個指令中。

「控制器爲」表達式適用於普通控制器。所以,只要做你自己的忙,並把你的邏輯變成指令鏈接功能。

+0

感謝控制器的細節!其實我對一個普通的控制器和指令控制器感到困惑。再次感謝! – user2331095

+13

這個答案是有誤導性的 - 指令控制器**與普通控制器相同,除了它不是由'ngController'指令實例化的,它是通過與它關聯的指令實例化的。它的工作原理是一樣的,注射劑,「控制器」,一切。 邏輯可以/應該放在指令的控制器中 - 鏈接函數應該主要用於DOM操作。 –