Это мой контроллер
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)
в моей директиве, чтобы сделать некоторую логику.
Может ли кто-нибудь предложить мне, как это сделать?
По умолчанию директива не создает дочернюю область. Таким образом, вы можете получить доступ к области вашего контроллера по умолчанию:
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
, передав его в атрибуте директивы
Вы также можете прочитать это. Это очень подробное объяснение наследования наследования.
Хотя вы можете использовать childscope или без области действия, наилучшей практикой является использование изолированной области:
app.directive('monthDirective', function () {
return {
scope: {
months: '='
},
//The rest
}
});
Применение:
<div month-directive months="months"></div>