2013-04-03 23 views
2

而不是使用ng-controller指定控制器名稱我想通過指令中的屬性指定控制器名稱,然後將其替換爲模板(我想要執行此操作這個奇怪的方式只是爲了探索AngularJS)。在AngularJS中的指令中使用控制器名稱(ng-controller)的表達式

這裏是鏈接到普拉克: http://plnkr.co/edit/KZgLQ6?p=preview

例如什麼我試圖做

<sample-drtv ctrl-name="drtvCtrl"></sample-drtv> 

模板(sampleDrtv.html):

<div ng-controller="{{ctrlName}}"> 
    <p>{{ptagcontent}}</p> 
</div> 

指令代碼:

var myModule = angular.module('ng'); 

myModule.directive('sampleDrtv',[function(){ 
    return { 
     restrict: "E", 
      replace: true, 
      templateUrl: "sampleDrtv.html", 
      scope: {}, 
      controller: function($scope,$element,$attrs){ 
       $scope.ctrlName = $attrs.ctrlName; 
       console.log($scope); 
      } 
     }; 

}]); 

function drtvCtrl($scope){ 
    $scope.ptagcontent = "AngularJS Rocks"; 
} 

我得到我的控制檯上的錯誤:

Error: Argument '{{ctrlName}}' is not a function, got undefined 

關於我應該怎麼做的任何想法ctrlName被替換爲表達式?我相信我完全不理解指令的概念,所以我犯了一個錯誤?

+0

什麼是nee的用例丁使用表達式來定義控制器? – charlietfl

+0

你只是想讓另一個ng-controller.there已經有一個。 –

+0

謝謝你們的答覆。這是否讓AngularJS首先嚐試連接ng-controller指令?而無需替換表達式中的值。我的指令的鏈接函數在ng-controller的表達式被評估後調用?爲什麼這樣? – Durin

回答

0

我會推薦這樣的結構:

<sample-drtv></sample-drtv> 

模板(sampleDrtv.html):

<div ng-controller="drtvCtrl"> 
    <p>{{ptagcontent}}</p> 
</div> 

AngularJS部分:

var myModule = angular.module('ng'); 

myModule.directive('sampleDrtv',[function(){ 
    return { 
    restrict: "E", 
    replace: true, 
    templateUrl: "sampleDrtv.html" 
    }; 
}]); 

function drtvCtrl($scope){ 
    $scope.ptagcontent = "AngularJS Rocks"; 
} 

見普拉克:http://plnkr.co/edit/GwnqK6?p=preview

+0

感謝您的回覆。我感謝您的幫助。我最初採用這種方法,當然這會起作用。然而,我很好奇我想達到的確切原因是什麼不起作用? – Durin

+0

爲什麼選擇投票,這是一個工作的例子? –

+0

對不起,我沒有投票。無論如何!如果你能幫助我理解爲什麼我試圖做的事情在技術上不起作用,我將不勝感激。也許如果你/某人能夠向我解釋我AngularJS如何處理這種情況會更有幫助。再次感謝! – Durin

相關問題