从链接功能调用控制器功能

时间:2016-01-05 07:37:45

标签: javascript angularjs rest

我试图通过链接功能调用控制器中的函数。从控制器功能,我必须拨打休息服务电话。 (我尝试从链接功能调用休息服务,但我没有成功。所以我试图从链接调用控制器功能,从那里我将调用休息服务。)

我的代码如下。

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服务。但是未定义不是函数错误。 有人可以帮忙吗?另外,请告诉我这是一个正确的方法(从链接功能到控制器,从控制器到休息呼叫。由于我的时间线较少,我想不出其他方法)

1 个答案:

答案 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);
        }

        ....
    }
});

这样,如果需要,您也可以在控制器中调用它。 相反,如果你必须与控制器进行通信,那么你可以使用信号。