2012-11-01 146 views
6

訪問一個元素指令的範圍鑑於這種簡單的角模塊:角度:如何在控制器

angular.module('fixturesModule', []) 
.directive('clubfixtures', function() { 
    "use strict"; 
    return { 
     restrict: 'E', 
     replace: true, 
     transclude: true, 
     scope: { 
      club : "@club", 
      max : "@max" 
     }, 

    templateUrl: "ClubResultsTemplate.html", 

    controller: function ($scope, $http) { 

     $http.get("data.json").success(function (data) { 
      $scope.results = data; 
     }); 

     $scope.sortBy = "Date"; 

    } 
} 
}); 

如何訪問俱樂部和最大的控制器功能?

謝謝, 傑夫

+1

在其控制器的功能?在指令的控制器功能?或者在指令的父級的控制器函數中? –

+0

使用共享服務? – maxisam

+0

在上例中給出的'controller($ scope,$ http)'分配給'controller'。具體來說,'俱樂部'的價值將形成'$ http.get' – jeffeld

回答

5

的2提及的變量(maxclub)將在注射到指令的控制裝置的範圍來簡單地定義。這意味着您可以在您的指令控制器中編寫:

controller: function ($scope, $http) { 

     $scope.max; //do sth with $scope.max 
     $scope.club //so sth with $scope.club 

     $http.get("data.json").success(function (data) { 
      $scope.results = data; 
     }); 
} 

如果您想了解更多信息,我會建議http://docs.angularjs.org/guide/directive中的「指令定義對象」,它涉及指令中的範圍。

+1

感謝您花時間回覆路徑的一部分。但是,當我將'console.log($ scope.club);'添加到控制器函數時,我只是將undefined作爲輸出。 – jeffeld

+0

它應該工作。你應該設置一個plunker http://plnkr.co/ – maxisam

+1

我需要看到更多的代碼來幫助更多,特別是如何在HTML中使用該指令,以及在使用該指令的範圍內有哪些數據可用。你認爲你有可能提供一個jsFiddle/plunk與現場代碼? –

10

用'@'設置的範圍的屬性,如scope: { myAttr: '@' }在之後接收它們的值控制器功能已被調用。

你可以用一個簡單的setTimeout證明這一點 - 請參閱http://jsfiddle.net/Q4seC/(一定要打開控制檯)

$ ATTRS,因爲你已經找到,正準備當你需要它。

有趣的是,如果你使用「=」代替「@」,該值是準備好和可用的,這讓我覺得這可以被認爲是在角中的錯誤...

+0

這是正確的答案。謝謝! –

+0

這就是我的想法。感謝您爲我清理。 – GFoley83

+0

+1這是最有用的答案,但它仍不能確定爲什麼這些範圍屬性在控制器功能點處未定義。確認爲錯誤?更多信息? –