1

Может ли кто-нибудь сказать мне, можно ли назначить контроллер из директивы разметки до того, как ng-repeat выполнит свою задачу?Угловой, как назначить контроллер разметке до ng-repeat

Код ниже всего лишь пример того, что я хочу сделать

<body ng-app="App"> 
<div my-t> 
    <div ng-repeat="obj in List"> 
    {{obj.Name}} 
    </div> 
</div> 

angular.module('App',[]) 
.directive('myT',[function(){ 
    return { 
     replace : true, 
     transclude : true, 
     template : '<div ng-controller="listCtrl"><div ng-transclude></div></div>' 
    }; 
}]) 
.controller('listCtrl', ['$scope', function($scope){ 
    $scope.List = [ 
     {Name: 'a'},{Name: 'b'} 
    ]; 
}]); 

Plunker

Проблема заключается в том, что, когда моя директива изменяет шаблон, назначая нг -контроллер ng-repeat уже скомпилирован и поэтому не будет отображать данные. Перемещение ng-контроллера в разметку это не вариант.

Лучший.

+0

вы можете поместить 'нг-контроллер = "ListCtrl"' любого элемента родителя ваших нг-повтор, даже на тот же элемент, 'нг-app' на – maurycy

+0

Привет @maurycy Я явно хочу, чтобы директива вставляла в разметку, какой контроллер собирается использовать, это не вопрос того, где ее поставить, - это вопрос использования директивы для размещения ng-контроллера и ng-repeat сможет использовать список, указанный контроллером. Но спасибо :) –

+1

Вы также можете поставить 'controller' в свою директиву с помощью' controller: 'listCtrl'', вы также можете удалить 'ng-controller' из своего шаблона. –

ответ

1

Вы также можете поместить контроллер в свою директиву, с controller: 'listCtrl', затем вы можете удалить ng-controller из своего шаблона.

1
<div my-t> 
    <div ng-repeat="obj in List"> 
    {{obj.Name}} 
    </div> 
</div> 

Контроллер

angular.module('App',[]) 
.directive('myT',[function(){ 
    return { 
     restrict: 'A', 
     replace : true, 
     transclude : true, 
     template : '<div><div ng-transclude></div></div>', 
     controller : 'listCtrl' 
    }; 
}]) 
.controller('listCtrl', ['$scope', function($scope){ 
    $scope.List = [ 
     {Name: 'a'},{Name: 'b'} 
    ]; 
}]);