如何使用服务而不是控制器

时间:2016-10-04 14:35:57

标签: javascript angularjs

我不知道如何在AngularJS1应用中使用服务而不是控制器。

这是我的控制器,我想使用服务,因为我想在我的html中有2个控制器,1个用于表单,1个用于表列表。

我该怎么做?

2 个答案:

答案 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;
    ...
}

但是有很多方法可以在控制器之间共享数据。简单的谷歌搜索将为您提供答案。