2

Я имею эту директиву, что я хотел бы сделать компонентУгловая Directive компоненту угловой 1,5

angular.module('app') 
.directive('year', function() { 
    var controller = ['$scope', function ($scope) { 
     $scope.setYear = function (val) { 
      $scope.selectedyear = val; 
     } 
    }]; 
    return { 
     restrict: 'E', 
     controller: controller, 
     templateUrl: "views/year.html" 
    }; 
}); 

Это то, что я до сих пор:

angular.module('app') 
.component('year', { 
     restrict: 'E', 
     controller: controller, 
     templateUrl: "views/year.html" 
    }); 

Я не знаю, как пошевелить var controller в .component

ответ

3

Есть несколько вещей, которые вы должны сделать преобразовать директиву компонента

  • не имеет ограничений свойство для компонента, поскольку оно ограничено только элементами.
  • Для контроллера вы можете просто установить, как вы это делали при объявлении директивы, но вне.
  • Контроллеры для компонентов используют controllerAs синтаксис по умолчанию так избавиться от $ рамки

Так что ваш компонент должен выглядеть следующим образом ...

angular.module('app') 
    .component('year', { 
     controller: ComponentController, 
     templateUrl: "views/year.html" 
    }); 

function ComponentController(){ 
    var $ctrl = this; 

    $ctrl.setYear = function (val) { 
     $ctrl.selectedyear = val; 
    } 
} 
+0

Благодарим вас за подробное описание. Этот вид работает, но я думаю, что сейчас что-то еще сломалось. Потому что у меня есть кнопка «Год», но мой раскрывающийся список больше не отображается. – mtkilic

+1

, потому что компоненты используют контроллер. Синтаксис и псевдоним по умолчанию - $ ctrl. вы также должны обновить свой компонент html. В качестве примера с $ scope ng-click = "clickBtn()" с контроллеромAs ng-click = "$ ctrl.clickBtn()" –

0

Ваш компонент должен выглядеть следующим образом :

function YearController() { 
    var $ctrl = this; 

    $ctrl.setYear = function (val) { 
    $ctrl.selectedyear = val; 
    } 
} 

angular.module('app').component('year', { 
    templateUrl: 'views/year.html', 
    controller: YearController 
}); 

Для получения более подробной информации, пожалуйста, прочтите описание из-за переполнения стека вопрос для более deatils: Angular 1.5 component vs. old directive - where is a link function? и официальную документацию: https://docs.angularjs.org/guide/component

Кроме того, обратите внимание, что компоненты ограничены элементами только по умолчанию.