[JavaScript][角度]:类型错误:无法读取未定义的属性“getCityData”
[JavaScript][Angular]: TypeError: Cannot read property 'getCityData' of undefined
这个问题以前被问过很多次,我已经尝试了答案,但它们似乎并没有解决我面临的问题。我是 Angular 的新手,正在尝试将值从控制器传递到工厂,以便我可以通过 API 检索一些 JSON 信息。虽然我能够将值从我的 HTML 获取到控制器,但下一步是给我一个类型错误:无法读取未定义的属性"getCityData"。我的控制器代码如下:
app.controller('MainController', ['$scope', function($scope, HttpGetter) {
var successFunction = function(data) {
$scope.data = data;
}
var errorFunction = function(data) {
console.log("Something went wrong: " + data);
}
$scope.cityName = '';
$scope.getCityName = function(city) {
$scope.cityName = city;
HttpGetter.getCityData($scope.cityName, successFunction, errorFunction);
};
}]);
出厂代码如下:
app.factory('HttpGetter', ['$http', function($http){
return {
getCityData: function(query, successFunction, errorFunction){
return $http.get('http://api.apixu.com/v1/current.json?key=MyAppKey&q=' + query).
success(successFunction).
error(errorFunction);
}
};
}]);
为了安全起见,我已将我的应用程序密钥替换为字符串"MyAppKey",但我的代码包含适当的密钥。此外,如果我能深入了解函数调用是如何发生的,那将非常有帮助,因为似乎有很多函数回调正在发生。
获得undefined
可能是因为服务未正确注入。
尝试:
app.controller('MainController', ['$scope', 'HttpGetter', function($scope, HttpGetter)
另外,正如您所说,为了安全起见,您没有使用正确的密钥,但是使用您的应用程序的任何人都可以通过检查网络调用来获取密钥。因此,理想情况下,应该调用后端,后端会将调用与安全密钥一起发送到所需的 API 端点,并将响应数据返回到前端。
可能是由于['$scope', function($scope, HttpGetter)
?
应该改为['$scope', 'HttpGetter', function($scope, HttpGetter)
。
您使用缩小版本并仅注入$scope
而不是HttpGetter
而是用作控制器函数中的参数,这就是为什么得到HttpGetter
是不可欺骗的,并且显示错误 无法读取未定义的属性"getCityData"
因此,您应该在缩小版本中注入HttpGetter
['$scope', 'HttpGetter'
像这样使用:
app.controller('MainController', ['$scope', 'HttpGetter', function($scope, HttpGetter)
而不是
app.controller('MainController', ['$scope', function($scope, HttpGetter)
如果您的MyAppKey
是安全的并且想要对用户隐藏,那么您应该在服务器端使用它
- 主干中的模型属性未定义
- JavaScript 2d 数组导致“无法读取未定义的属性'未定义'”
- JSON对象属性未定义
- Waypoint的循环,退出循环后属性未定义
- Javascript:错误“无法设置属性”..'未定义”
- 翡翠 - 显示对象属性 - 未定义
- 属性未定义,但控制台.log可以看到它
- JavaScript 对象的属性未定义
- Javascript 对象属性未定义(但属性已设置)
- DOM 元素属性未定义 - jquery / ruby on rails.
- Nodejs JSON 属性未定义
- 错误:窗口打开器的属性未定义
- angular Js:Array.lenght属性未定义
- 正在尝试访问JavaScript对象的属性=未定义
- Marionette属性未定义,请从API获取
- AngularJS作用域属性未定义
- 对象的属性未定义,尽管已指定值
- 为什么我一直收到一个错误,说对象属性未定义
- 对象属性未定义,但我看到它不是
- .map()img src属性未定义