我是Angularjs的新手,几天前刚刚开始,
我有一个使用$ http的代码,工作正常。
var sampleApp = angular.module('sampleApp', []); // Define new module for our application
// Create new controller, that accepts two services $scope and $http
function SampleCtrl($scope, $http) {
$scope.date = "sample date"; // Bind data to $scope
// Define new function in scope
$scope.fetch = function() {
// Use $http service to fetch data from the PHP web service
$http.get('api.php').success(function(data) {
$scope.date = data.date; // Bind the data returned from web service to $scope
});
}
};
SampleCtrl.$inject = ['$scope', '$http']; // Ask Angular.js to inject the requested services,
sampleApp.controller('SampleCtrl', SampleCtrl); // Initialize controller in pre-defined module
========================
我尝试了两件事
1。当我从上面的代码中注释 SampleCtrl.$inject = ['$scope', '$http'];
行时,代码仍然有用,我需要知道,为什么我们需要这个或什么时候我们需要这个。
2。将抓取功能分开,如
function fetchData() {
// Use $http service to fetch data from the PHP web service
$http.get('api.php').success(function(data) {
$scope.date = data.date; // Bind the data returned from web service to $scope
});
return $scope;
}
// Create new controller, that accepts two services $scope and $http
function SampleCtrl($scope, $http) {
// Define new function in scope
$scope.fetch = fetchData($scope, $http);
};
抱歉无法生成jsfiddle,但这是我试用的代码
https://www.openshift.com/blogs/how-to-use-angularjs-with-php-hosting-on-openshift
在“etting Started with Angular.js
部分。
答案 0 :(得分:1)
这是因为代码缩小。当您使用minifier运行代码时,它会将SampleCtrl
中的参数名称替换为function SampleCtrl(a,b)
,您需要避免这种情况,因为依赖注入器不知道要注入哪些服务。
一种解决方案是像你一样使用$inject
。这将确保DI将注入正确的服务。
另一种解决方案是以这种风格编写控制器
angular.module('myApp').controller('myCtrl', ['$scope', '$http', function($scope, $http) {
// logic
}]);
这两种方式可以互换