2014-02-27 90 views
0

一些問題,首先我會告訴你我的html:約Angularjs指令

<div class="pager" pager-control getPageNumber="getPageNumber()" getPageData="getPageData()"> 

我的這個「指令」的目的是使尋呼機。 這是JS文件自爆:

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

paging.controller('pageCtrl',function($scope,$timeout){ 


$scope.currentPageIndex = 0; 
$scope.model = [ 
    { name: 'www'}, 
    { name: 'www'}, 
    { name: 'www'}, 
    { name: 'www'}, 
    { name: 'www'} 
]; 

$scope.getPageNumber = function(){ 
    var len = 10,ret=[]; 
    for(i = 0;i < 10; i++) { 
    ret.push(i); 
    } 
    return ret; 
}; 

$scope.getPageData = function(index) { 
    $scope.currentPageIndex = index; 
    alert('trigger!'); 
}; 
}); 

paging.directive('pagerControl',function(){ 

return { 
    restict: 'A', 
    replace: false, 
    transclude: true, 
template: '<ul ng-transclude><li ng-class="{current: $parent.currentPageIndex == $index}" ng-repeat="d in $parent.getPageNumber()" ng-click="$parent.getPageData($index)">{{$index + 1}}</li> </ul>', 
scope: { 

}, 

link: function(scope,elem,attr) { 

} 

};

});

希望 「當你點擊頁面項目,顏色會發生變化」,但沒有happends ..

這是jsbin網址:
http://jsbin.com/vijax/2/edit

回答

0

我定你的jsbin:

http://jsbin.com/kaziqice/2/edit

有2個問題,你的代碼:

1)ng-repeat創建子範圍。

您有ng-click="$parent.$parent.getPageData($index)"更換ng-click="$parent.getPageData($index)"訪問正確的範圍

2)current-index="currentPageIndex"更換currentIndex="currentPageIndex"。這是角Angular JS naming conventions ($, camelCase and PascalCase)

的命名約定對於第一個問題,你不應該直接綁定到你的父母範圍,因爲它會在代碼中創建一個緊耦合。您應該綁定到您的範圍自己的屬性。

+0

Thank you it works .. but why「$ parent。$ parent.getPageData($ index)」not「$ parent.getPageData($ index)」? thx再次 –

+0

@ Daniel.Woo:因爲'ng-repeat'創建子範圍=>還有'1個更深層次'。 $ parent是您的指令的範圍和$ parent。$ parent是您的控制器的範圍。 –

+0

我意識到...謝謝你... –