我试图通过链接功能调用控制器中的函数。从控制器功能,我必须拨打休息服务电话。 (我尝试从链接功能调用休息服务,但我没有成功。所以我试图从链接调用控制器功能,从那里我将调用休息服务。)
我的代码如下。
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.....");
}
});
在这里,我试图从link.From testFunction调用testFunction,我打算调用一个rest服务。但是未定义不是函数错误。 有人可以帮忙吗?另外,请告诉我这是一个正确的方法(从链接功能到控制器,从控制器到休息呼叫。由于我的时间线较少,我想不出其他方法)
答案 0 :(得分:0)
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);
}
....
}
});
这样,如果需要,您也可以在控制器中调用它。 相反,如果你必须与控制器进行通信,那么你可以使用信号。