返回并使用存储在localStorage AngularJS中的参数调用Web服务

时间:2017-11-30 16:49:45

标签: angularjs angularjs-directive

我正在尝试创建一个指令,该指令会将页面返回到我的搜索文档表单并调用我的' documentSearch'方法。由于浏览器抱怨,我不确定这里出了什么问题

  

未捕获的TypeError:无法读取属性' dsSvc'未定义的

APPCONFIG.dsSvc存储Web服务存储的位置信息。它在搜索页面上运行得非常好,但是在这个指令中,我创建的并不是。知道为什么吗?我已经坚持了足够长的时间。我不能完全确定它是否按照我的方式工作(返回屏幕并调用Web服务)。

app.directive('previousPage', ['$window', function($window) {
    return {
        restrict: 'A',
        link: function (scope, elem, attrs, $scope,GenericServiceSvc,APPCONFIG) {
            elem.bind('click', function () {
                $window.history.back();

                var paramsBack = JSON.parse(window.localStorage.getItem('srchParams'));

                var svcData = {
                    invoke: 'documentSearch',
                    app: APPCONFIG.dsSvc,
                    params: paramsBack
                };

                GenericServiceSvc.callService(svcData).then(

                    function (response) {
                        if (response) {
                            console.log(response);
                        } else {
                            //no results
                        }
                    }, function () {
                        console.log(svcData.invoke + '- Fail');
                    }
                );

            });
        }
    };
}]);

1 个答案:

答案 0 :(得分:1)

链接功能具有以下签名:

function link(scope, element, attrs, controller, transcludeFn) {...}

看起来您正在尝试将APPCONFIG(它是服务/工厂/常量吗?)注入链接功能,因此您真正要求的是AngularJS从其预期中获取dsSvc成为transcludeFn参数。

将您的注射移动到指令功能:

app.directive('previousPage', ['$window', 'GenericServiceSvc', 'APPCONFIG', function($window, GenericServiceSvc, APPCONFIG) {
    return {
        restrict: 'A',
        link: function (scope, elem, attrs) {
            elem.bind('click', function () {
                $window.history.back();

                var paramsBack = JSON.parse(window.localStorage.getItem('srchParams'));

                var svcData = {
                    invoke: 'documentSearch',
                    app: APPCONFIG.dsSvc,
                    params: paramsBack
                };

                GenericServiceSvc.callService(svcData).then(

                    function (response) {
                        if (response) {
                            console.log(response);
                        } else {
                            //no results
                        }
                    }, function () {
                        console.log(svcData.invoke + '- Fail');
                    }
                );

            });
        }
    };
}]);