Как передать значение из контроллера в директиву

0

Это мой контроллер

var controller = app.controller('ctrl', ['$scope', function ($scope) {
$scope.months = ["January", "February", "March", "April",
                "May", "June", "July", "August", "September",
                "October", "November", "December"];
}]);

Это моя директива

app.directive('monthDirective', function () {

return {

    restrict: 'A',
    link: function (scope, elem) {

        var fromDate , toDate;
        scope.$watch('fromdate', function (newValue, oldValue) {
            fromDate = new Date(newValue);
            fromDate = moment(newValue, 'YYYY-MM-DD');
            console.log('newValue', newValue)
        });

        scope.$watch('todate', function (newValue, oldValue) {
            toDate = new Date(newValue);
            toDate = moment(newValue, 'YYYY-MM-DD');
            var range = moment.range(fromDate, toDate);
            console.log('toDate', toDate)
            range.by('months',function (moment) {
                moment.toArray('months');
                console.log('I am the array', moment.toArray('months'));
                var mom = moment.toArray('months');
                for (var i = 0; i <= scope.months.length; i++)
                {
                    for (var j = 0; j <= mom.length;j++)
                    {
                        if(scope.months[i] == mom[j][1])
                        {

                        }
                    }
                }

            });
        });

    }
  }
})

Я хочу получить доступ к $scope.months(present in my controller) в моей директиве, чтобы сделать некоторую логику.

Может ли кто-нибудь предложить мне, как это сделать?

  • 0
    Что вам на самом деле нужно? Доступ к родительской области или передать переменную в директиву?
  • 0
    Мне нужно получить доступ к $ scope.months (который находится в контроллере) в директиве
Теги:

2 ответа

2
Лучший ответ

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

app.controller('myController', function ($scope) {
  $scope.test = 'test1';
});
app.directive('myDirective', function () {
  return {
    restrict: 'A',
    link: function (scope, elem) {
        console.log(scope.test)
    }
  }
})

http://plnkr.co/edit/5u2c3mYbLyAX4LIC82l2?p=preview

Но NexusDuck правильный. Лучшей практикой является использование изолированной области действия для директивы. Таким образом, вы можете получить доступ к months, передав его в атрибуте директивы

Вы также можете прочитать это. Это очень подробное объяснение наследования наследования.

3

Хотя вы можете использовать childscope или без области действия, наилучшей практикой является использование изолированной области:

app.directive('monthDirective', function () {

return {
    scope: {
      months: '='
    },
    //The rest
  }
});

Применение:

<div month-directive months="months"></div>
  • 0
    scope: true тоже можно использовать.
  • 1
    @ Silvinus, как я уже сказал, можно использовать детскую прицел (область действия: правда), но это плохая практика
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню