Итак, у меня есть проблема с изолированием области действия директивы. Прежде чем я выделил область действия, она отлично работала, вытаскивая функцию, которая получала данные с фабрики, из родительской области. Эта директива будет слайдером, который должен иметь возможность иметь несколько экземпляров на странице. По этой причине мне нужно было выделить сферу действия. Я пробовал несколько разных вещей, и ничего не сработало, поэтому я предполагаю, что у меня что-то еще не так. Вот фрагменты моего кода. Заранее благодарю вас за помощь. :)Передача заводских данных с родительского контроллера для выделения директивы scope
Отредактировано для добавления: Область применения теперь успешно изолирована, но функций, похоже, нет. Когда несколько экземпляров директивы, функции влияют на каждый экземпляр, а не только на один.
Контроллер:
//
function BaseController ($scope, dataFactory) {
$scope.getMedia = function() {
dataFactory.getMedia()
.success(function (data) {
console.log(data);
$scope.sliderItems = data.Items;
$scope.topItems = [];
$scope.bottomItems = [];
// divide results of sliderItems into 2 rows
// this ensures that first item from EACH ROW disappears
for (var i=0; i < $scope.sliderItems.length; i++){
if ((i+2)%2==0) {
$scope.topItems.push($scope.sliderItems[i]);
}
else {
$scope.bottomItems.push($scope.sliderItems[i]);
}
}
})
.error(function (error) {
$scope.status = 'Unable to load ' + error.message;
});
}
}angular
.module('bellApp')
.controller('BaseController', BaseController);
//
Директива:
function singleSlider() {
return {
// default is A, no need to asign
templateUrl: 'views/single-slider.html',
scope: {
slideritems :'='
},
link: function (scope) {
scope.displayInfo = function (item) {
scope.itemDetail = item;
scope.box = true;
};
scope.close = function() {
scope.box = false;
};
scope.sSlide = function() {
//set the appropriate direction
scope.direction = 1;
var slider = scope.slideritems;
//remove first item from slider
var shift = slider.shift();
//send removed item to end of slider array
slider = slider.push(shift);
};
scope.sSlideBack = function() {
//set the appropriate direction
scope.direction = 0;
var slider = scope.slideritems;
//remove last item from slider
var pop = slider.pop();
//send to front of array
slider = slider.splice(0,0,pop);
};
}
};
}angular
.module('bellApp')
.directive('singleSlider', singleSlider);
Вид:
...
<body ng-app="bellApp" ng-controller="BaseController">
<div single-slider media="getMedia()" class="media-slider"></div>
...
Можете ли вы создать плункер? Что не работает? –
Вы вызываете getMedia. он должен быть «
». С другой стороны, я не вижу никакого вызова функции внутри функции ссылок директив. –не пропускайте funtion, если вам нужны только данные. вызывать функцию funtion в контроллере $ scope.getMedia(); и передать результат, что вам нужно $ scope.sliderItems, $ scope.topItems, $ scope.bottomItems к изолированной директиве – micha