У меня это в контроллере

angular.module('myApp')
  .controller('TaskController', function ($scope, TaskFactory) {
    $scope.addTodo = function () {
      $scope.todos.push({text : $scope.formTodoText});
      $scope.formTodoText = '';
    };
  });

А это на заводе

angular.module('myApp')
  .factory('TaskFactory', function ($q, $http) {
    var sendTasks = function(params) {
      var defer = $q.defer();
      console.log(1, params);
      $http.post('http://localhost:3000/task/save', params)
        .success(function(data) {
          console.log(2);
          console.log('data', data);
        })
        .error(function(err) {
          defer.reject(err);
        });
      return defer.promise;
    }

    return {
      sendTask: function(taskData) {
        console.log('taskData', taskData);
        return sendTasks('/task/save', {
          taskData : taskData
        })
      }
    }
  });

Все, что мне нужно, это знать, как отправить данные с контроллера на завод, чтобы сделать POST по указанному маршруту?

0
Reacting 17 Дек 2015 в 07:11

3 ответа

Лучший ответ

Вам просто нужно вызвать функцию / метод внутри фабрики с необходимыми параметрами.

 angular.module('myApp')
  .controller('TaskController', function ($scope, TaskFactory) {
    $scope.addTodo = function () {
      $scope.todos.push({text : $scope.formTodoText});
      TaskFactory.sendTask({data : $scope.formTodoText})
      $scope.formTodoText = '';
    };
  });
1
Neeraj Verma 17 Дек 2015 в 05:14

Вы можете вызвать функцию непосредственно в TaskFactory, которую вы передаете в контроллер как зависимость.

Я немного почистил ваш код и создал план для вас здесь:

А вот код:

Контроллер

(function(angular) {

    // Initialise our app
    angular.module('myApp', [])
        .controller('TaskController', function($scope, TaskFactory) {

      // Initialise our variables
      $scope.todos = [];
      $scope.formTodoText = '';

      $scope.addTodo = function() {
        // Add an object to our array with a 'text' property
        $scope.todos.push({
          text: $scope.formTodoText
        });

        // Clear the input
        $scope.formTodoText = '';

        // Call function to send all tasks to our endpoint
        $scope.sendTodos = function(){
          TaskFactory.sendTasks($scope.todos);
        }
      };
  });

})(angular);

Завод

(function(angular) {

    angular.module('myApp')
        .factory('TaskFactory', function($q, $http) {

            var sendTasks = function(params) {
                var defer = $q.defer();
                $http.post('http://localhost:3000/task/save', params)
                    .success(function(data) {
                        console.log('data: ' + data);
                    })
                    .error(function(err) {
                        defer.reject(err);
                    });
                return defer.promise;
            }

            return {
                sendTasks: sendTasks
            }

        });

})(angular);
0
Chris 17 Дек 2015 в 05:30

Вы можете следить за публикацией в блоге Дэна Уолина.

Контроллер:

angular.module('customersApp')
    .controller('customersController', ['$scope', 'dataFactory', function ($scope, dataFactory) {

    $scope.status; 

    dataFactory.updateCustomer(cust)
      .success(function () {
          $scope.status = 'Updated Customer! Refreshing customer list.';
      })
      .error(function (error) {
          $scope.status = 'Unable to update customer: ' + error.message;
      });    
}

Завод:

angular.module('customersApp')
    .factory('dataFactory', ['$http', function($http) {

    var urlBase = '/api/customers';   

    dataFactory.updateCustomer = function (cust) {
        return $http.put(urlBase + '/' + cust.ID, cust)
    };

}

Надеюсь, что решить вашу проблему.

1
Khalid Hussain 17 Дек 2015 в 04:30