Pregunta

Estoy intentando crear un servicio cuando puedo configurar mi envío de formulario.

Por ejemplo.En el controlador A llamo "service.setFormSubmit(doThis(obj))" y en el controlador B llamo "service.getFormSubmit()".Donde ejecutará la función doThis(obj) en el controlador B.

ACTUALIZACIÓN: pregunta reformulada.

Tengo 1 vista donde quiero editar o crear una categoría.Esto significa que necesito un envío ng dinámico.Quiero hacer esto en el controlador.Entonces así:

$scope.editCategory = function(obj) {
     $scope.formSubmit = 'editCategory'
}

Y al crear, quiero cambiar la var formSubmit a createCategory, por supuesto.Entonces puedo marcar la diferencia entre crear y editar la categoría.

es posible?¡Sería muy bueno si alguien tuviera una manera de hacer esto...!

¡Gracias de antemano!

¿Fue útil?

Solución

En lugar de pasar cadenas que deben evaluarse, utilice el servicio para compartir funcionalidad directamente entre controladores.

El servicio puede ser muy simple:

.factory('MyService', function(){
  var service = {};
  return service;
});

Una vez inyectada y asignada a las variables de alcance en ambos controladores, tiene una unidad intermediaria que puede actuar como un canal modificable para la colaboración entre controladores.

.controller('FirstController', function($scope, MyService){
  $scope.service = MyService;
})
.controller('SecondController', function($scope, MyService){
  $scope.service = MyService;

  $scope.service.create = function(obj){
    console.log('Creating');
  }

  $scope.service.edit = function(obj){
    console.log('Editing');
  }
})

Desde el ámbito de FirstController, ahora puede llamar a la función también disponible en el alcance de SecondController:

<div ng-controller="FirstController">
  <input type="checkbox" ng-model="button.type"> Toggle create/edit<br/>
  <button ng-if="button.type" ng-click="service.create(obj)">Create</button>
  <button ng-if="!button.type" ng-click="service.edit(obj)">Edit</button>
</div>

Manifestación

Otros consejos

Si no está recargando la página, puede crear una variable encapsulada en su servicio.Su llamada establecida le asignará el valor pasado a esa variable y su llamada Obtener devolvería esa variable a la persona que llama.

Una forma en que he logrado pasar los datos es enviar el formulario utilizando el servicio y devolver un resultado JSON al servicio.Almacene el objeto JSON en la variable encapsulada en la devolución y luego pase un éxito o falla al controlador.Cuando sea exitoso, deje que el controlador redirija la vista que redirige utilizando el enrutamiento angular y la vista NG.Una vez que la nueva vista, junto con el nuevo controlador, se carga en la página, puede llamar a la variable en su servicio para recuperar los datos en el siguiente controlador.

Código de ejemplo:

app.factory('service', function ($q, $http) {
    var savedData;

    return {
        loadData: function() {
            return data;
        },
        search: function (parameters) {
            var searchURL = '/MVCController/Search?parameter1=' + parameters.one +
                '&parameter2=' + parameters.two;
            var deferred = $q.defer();

            $http.get(searchURL).success(function (data) {
                savedData = data;
                deferred.resolve(true);
            }).error(function(data) {
                data = 'An error occurred while searching: ' + data;
                savedData = data //(if you want to save the error)
                deferred.reject(data);
            });

            return deferred.promise;
        }
    }
});

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top