angularjs - servicios - spring rest angular
angular envía directamente el parámetro $ scope desde la vista al servicio o a la fábrica (2)
El servicio debe depender directamente del
scope
, pueden depender indirectamente el uno del otro. Si pasa $ scope al servicio, se unirá estrechamente a ese controlador específico.
Como en su caso, solo pasa el número de cuenta, entonces el servicio realizará una operación requerida, como hacer una llamada ajax o obtener datos de algún lugar.
Fábrica
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
});
}
};
}]);
Controlador
$scope.myservice= getAllDetailsService
//this line will ensure updation in scope
$scope.myservice.accountDetailsToDisplay = getAllDetailsService.accountDetailsToDisplay;
Margen
<input name="accnum" ng-blur="myservice.getAccountDetailsToDisplay(accno)"/>
Del mismo modo, en el código anterior no usé $scope
como parámetro, el método de servicio solo devolverá los datos que se obtengan del servicio, y cualquiera que use el método de servicio solo puede obtener datos por servicio. Después de obtener datos del controlador de servicio, modifique el alcance en su propio contexto.
Tengo una fábrica y necesito llamar a fábrica. Quiero llamar a fábrica con dos parámetros. ¿Es posible enviar $ scope desde la plantilla?
Porque, estoy usando la misma fábrica para múltiples lugares.
<input name="accnum" ng-blur="myservice.getAccountDetailsToDisplay($scope, accno)" />
controlador,
$scope.myservice= getAllDetailsService;
En servicio,
tellerApp.factory(''getAllDetailsService'',[''$rootScope'', ''$resource'', ''$http'', ''$filter'', ''$window'', function ($rootScope, $resource, $http, $filter, $window) {
return{
getAccountDetailsToDisplay: function ($scope, accountnumber) {
console.log(''>>>>>>'');
}
};
}]);
Definitivamente, $ scope es el contexto interno de los controladores, por lo que no necesita usarlo en ningún otro lugar. Si desea usar fábrica, debe escribir de esta manera:
tellerApp.factory(''getAllDetailsService'',[''$rootScope'', ''$resource'', ''$http'', ''$filter'', ''$window'', function ($rootScope, $resource, $http, $filter, $window) {
return{
getAccountDetailsToDisplay: function (accountnumber) {
console.log(''>>>>>>'');
}
};
}]);
y en tu controlador invocas métodos de tu fábrica:
$scope.someMethod = getAllDetailsService.getAccountDetailsToDisplay;
y en su opinión: <input name="accnum" ng-blur="myservice.someMethod(accno)" />