Я пытаюсь вызвать функцию в контроллере из функции ссылок. Из функции контроллера я должен вызвать вызов службы отдыха. (Я попробовал позвонить в службу поддержки из функции ссылок, но я не получил успеха. Поэтому я пытаюсь вызвать функцию контроллера из ссылки, и оттуда я буду называть службу отдыха).
Мой код выглядит следующим образом.
app.directive('collection', function() {
return {
restrict: "E",
replace: true,
scope: {
collection: '=',
articleData: '=',
articleContent: '='
},
template: "<ul><member ng-repeat='member in collection' member='member' article-data='articleData' article-content='articleContent'></member></ul>"
}
});
app.directive('member', function($compile,$http) {
return {
restrict: "A",
replace: true,
scope: {
member: '=',
articleData: '=',
articleContent: '='
},
template: "<div><li><a href='#' ng-click='getContent(member.itemId)'>{{member.title}}</a></li></div>",
link: function(scope, element, attrs) {
scope.getContent = function(itemId) {
scope.testFunction(itemId);
}
if (angular.isArray(scope.member.tocItem)) {
if (scope.member.hasChildren == "true") {
for (var i = 0; i < scope.member.tocItem.length; i++) {
if (scope.member.tocItem.title) {
scope.member.tocItem.title.hide = true;
}
}
}
element.append("<collection collection='member.tocItem'></collection>");
$compile(element.contents())(scope)
}
}
}
});
app.controller('apdController', function($scope, getTocService,$location) {
var bookId = $location.search().id;
var sampdata = getTocService.getToc(bookId);
$scope.tasks =sampdata;
//$scope.tasks = data;
var artData = getTocService.getArtData('PH1234');
$scope.articleContent = artData;
$scope.testFunction = function(itemId){
alert("called.....");
}
});
Здесь я пытаюсь вызвать testFunction из link.From testFunction, я планирую позвонить в службу отдыха. Но получение undefined не является функциональной ошибкой. Кто-то может помочь? Кроме того, пожалуйста, дайте мне знать, это правильный подход (от функции ссылки до контроллера и от контроллера для отдыха. Поскольку моя временная линия меньше, я не мог придумать какой-либо другой подход)
Что делает testFunction
? У вас разные варианты. Если testFunction
вызывает услугу отдыха, вы обязательно должны перенести ее в службу.
app.factory('restService', function($http) {
function testFunction(itemId){
// Whatever you need
return $http.get('myUrl');
}
return {
testFunction: testFunction
}
});
Затем введите его в свою директиву
app.directive('member', function($compile, $http, restService) {
...
link: function(scope, element, attrs) {
scope.getContent = function(itemId) {
restService.testFunction(itemId);
}
....
}
});
Таким образом, вы также можете вызвать его в своем контроллере, если он вам когда-либо понадобится. Если вместо этого вам нужно что-то сообщить контроллеру, вы можете использовать сигналы.
$emit
и / или$broadcast
, это то, что вам нужно.