每当我尝试使用$http.get
时(无论是在控制器中还是在服务中),我的$scope
变量都会出现问题。
我的控制器看起来像这样:
app.controller('HomeController', ['$scope', function($scope, $http) {
$scope.today = new Date();
}]);
然后我得到了一个合适的输出6.11.2015
,例如today变量。但只要我输入这个或使用服务:
app.controller('HomeController', ['$scope', function($scope, $http) {
$scope.today = new Date();
$http.get("data/selectAll.php")
.success(function(data) {
$scope.lokale = data;
});
}]);
然后它就不起作用了,我只得到了{{today | date : 'dd.MM.yyyy'}}
。$scope.lokale
变量也不起作用。我试着使用json文件(我知道它确实有效)来确保我的php文件不是问题所在,但它也不起作用,所以这似乎不是问题所在。
使用$http的正确方法是
$http.get('/someUrl', config).then(successCallback, errorCallback);
使用.then()
而不是.success()
您的语法有一个小错误。:)
app.controller('HomeController', ['$scope', '$http', function($scope, $http) {
您已经放弃在控制器函数之前添加$http作为字符串。
看看这个关于依赖注入的Angular文档。查找"关于最小化的注释"。
关于最小化的一个注记由于Angular从控制器构造函数的参数名称推断控制器的依赖项,因此如果要缩小PhoneListCtrl控制器的JavaScript代码,其所有函数参数也将被缩小,依赖项注入器将无法正确识别服务。
我们可以通过用依赖项的名称来注释函数来克服这个问题,这些依赖项以字符串的形式提供,不会被缩小。有两种方法可以提供这些注入注释:
在控制器函数上创建$inject属性,该属性包含一个字符串数组。数组中的每个字符串都是要为相应参数注入的服务的名称。在我们的例子中,我们会写:
function PhoneListCtrl($scope, $http) {...}` PhoneListCtrl.$inject = ['$scope', '$http']; phonecatApp.controller('PhoneListCtrl', PhoneListCtrl);
使用内联注释,其中不只是提供函数,而是提供数组。此数组包含一个服务名称列表,后跟函数本身。
函数PhoneListCtrl($scope,$http){…}phonecatApp.controller('PhoneListCtrl',['$scope','$http',PhoneListctr]);这两种方法都适用于Angular可以注入的任何函数,因此使用哪种方法取决于项目的风格指南。
当使用第二种方法时,通常在注册控制器时以匿名函数的形式内联提供构造函数:
phonecatApp.controller('PhoneListCtrl', ['$scope', '$http', function($scope, $http) {...}]);