angular直接将$ scope参数从视图发送到服务或工厂

时间:2015-06-04 06:03:56

标签: angularjs angularjs-scope angularjs-factory

我有一个工厂,需要从视图中调用工厂。 我想用两个参数调用工厂。 是否可以从模板发送$ scope?

因为我在多个地方使用同一家工厂。

<input name="accnum" ng-blur="myservice.getAccountDetailsToDisplay($scope, accno)" />

控制器,

 $scope.myservice= getAllDetailsService;

在使用中,

tellerApp.factory('getAllDetailsService',['$rootScope', '$resource', '$http', '$filter', '$window',  function ($rootScope, $resource, $http, $filter, $window) {
    return{ 
           getAccountDetailsToDisplay: function ($scope, accountnumber) {
           console.log('>>>>>>');   
          }
};      
}]);

2 个答案:

答案 0 :(得分:2)

  

服务应该直接取决于scope,它们可以是   间接相互依赖。如果您将$ scope传递给该服务,它将与该特定控制器紧密耦合。

就像你的情况一样,你只传递accountnumber,然后服务会做一个必要的操作,比如做一个ajax调用或从某个地方获取数据。

<强>工厂

tellerApp.factory('getAllDetailsService', ['$rootScope', '$resource', '$filter', '$window', function($rootScope, $resource, $http, $filter, $window) {
    return {
        getAccountDetailsToDisplay: function(accountnumber) {
            return $http.get('/getAccountDetails?accountnumber=' + accountnumber).then(function(res) {
                //here you could do your addtional operation on data.
                return res.data; //giving access to data
            });
        }
    };
}]);

<强>控制器

$scope.myservice= getAllDetailsService
//this line will ensure updation in scope
$scope.myservice.accountDetailsToDisplay = getAllDetailsService.accountDetailsToDisplay; 

<强>标记

 <input name="accnum" ng-blur="myservice.getAccountDetailsToDisplay(accno)"/>

同样在上面的代码中我没有使用$scope作为参数,服务方法只返回从服务中获取的任何数据,而使用服务方法的人只能通过服务获得数据返回。从服务控制器获取数据后,在其自己的上下文中修改范围。

答案 1 :(得分:0)

当然,$ scope是控制器的内部环境,因此您不需要在任何其他地方使用它。 如果你想使用工厂,你应该这样写:

tellerApp.factory('getAllDetailsService',['$rootScope', '$resource', '$http', '$filter', '$window',  function ($rootScope, $resource, $http, $filter, $window) {
    return{ 
           getAccountDetailsToDisplay: function (accountnumber) {
           console.log('>>>>>>');   
    }
  };      
}]);

并在您的控制器中调用工厂的方法:

$scope.someMethod = getAllDetailsService.getAccountDetailsToDisplay;

并在您的观点上: <input name="accnum" ng-blur="myservice.someMethod(accno)" />