我不知道如何在AngularJS1应用中使用服务而不是控制器。
这是我的控制器,我想使用服务,因为我想在我的html中有2个控制器,1个用于表单,1个用于表列表。
我该怎么做?
答案 0 :(得分:2)
在AngularJS中,服务应该将其API作为Javascript对象返回,因此基本服务将如下所示:
> system.time(d <- dist(X, method = "manhattan"))
user system elapsed
151.79 0.04 152.59
> system.time(d2 <- as.dist( dist.matrix(as.matrix(X), method="manhattan") ))
user system elapsed
19.19 0.22 19.56
注意:使用//filename: user.service.js
angular.module('app')
.factory('userService', userService);
function userService() {
return {
sayHi
};
function sayHi() {
alert('Hi');
}
}
代替.factory
是一个很好的惯例。这些组件几乎相同,因此使用.service
更为常见。
当您返回Javascript对象时,您向控制器公开API,因此调用控制器内的服务就像:
factory
这是您创建服务的方式,以及如何在控制器中使用其功能。
现在,如果您需要有一个用户列表,那么您需要在服务中声明users数组,而不是在控制器中声明它,并返回服务API,例如:
//filename: user.controller.js
angular.module('app')
.controller('userCtrl', userCtrl);
function userCtrl($scope, userService) {
$scope.sayHi = userService.sayHi;
}
现在您可以从每个控制器访问方法//filename: user.service.js
angular.module('app')
.factory('userService', userService);
function userService() {
var users = [];
return {
addUser,
getUsers,
};
function addUser(user) {
users.push({
username: user.username,
level: user.level,
registrationStatus: user.registrationStatus,
registrationDate: user.registrationDate
});
}
function getUsers() {
return users;
}
}
并从每个控制器访问userService.addUser(user)
,您只需将服务作为控制器的参数包含在内,如上所述。
使用此服务的典型控制器如下所示:
userService.getUsers()
只要需要将用户添加到列表中,控制器就会调用angular.module('app')
.controller('UserCtrl', UserCtrl);
function UserCtrl($scope, userService) {
$scope.addUser = addUser;
$scope.users = userService.getUsers();
function addUser(user) {
userService.addUser(user);
$scope.user = {};
}
});
,并在需要从服务中检索用户时调用userService.addUser
。现在,userService.getUsers
数组将在使用此服务的所有控制器之间共享。
因此使用此控制器的视图将如下所示:
users
当然,这只是一个基本示例,您可以将自己的功能和行为添加到控制器和服务中,但您也可以使用示例作为代码的基础。
就是这样!如果您还需要其他任何东西,我将很乐意为您提供帮助:)
答案 1 :(得分:1)
如果您想使用该服务,请查看以下链接: https://docs.angularjs.org/guide/services
在你的情况下:
可以是:
myApp.service('userService',['$scope',function($scope){
$scope.user = [];
$scope.addUser = function () {...};
....
}])
并在您的控制器中:
myApp.controller('usersCtrl', function ($scope, userService) {
$scope.user=userService.user;
...
}
但是有很多方法可以在控制器之间共享数据。简单的谷歌搜索将为您提供答案。