我正在尝试创建一个指令,该指令会将页面返回到我的搜索文档表单并调用我的' 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');
}
);
});
}
};
}]);
答案 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');
}
);
});
}
};
}]);