2015-05-18 4 views
0

У меня возникли проблемы с выяснением причин, почему $http сервис из двух моих контроллеров запускается при переходе на связанные маршруты. Я попытался создать дополнительные функции внутри этих контроллеров, и они не запускаются, поэтому я подозреваю, что это связано с $ http. Doe $http сервис в контроллере всегда запускается после создания контроллера? Моя цель - убедиться, что функция postreq запускается с такими директивами, как ng-click и ng-submit, а не после создания экземпляра.

Вот мой код:

mainCtrl.js

angular.module('LiveAPP.main', []) 
    .controller('mainCtrl', ['$scope', '$http', '$location', mainCtrl]); 

function mainCtrl($scope, $http, $location) { 
    $scope.funcCheck = function() { 
     console.log("this is firing") 
    } 

    $scope.postreq = $http({ 
     method: "post", 
     url: "/", 
     data: { 
      user: "Junior", 
      password: "Thisispassword" 
     } 
    }).success(function() { 
     console.log("User posted to the database") 
    }); 
} 

signUpCtrl.js

angular.module('LiveAPP.signUp', []) 
    .controller('signUpCtrl', ['$scope', '$http', signUpCtrl]); 

function signUpCtrl($scope, $http) { 
    $scope.number = 100; 
    $scope.funcCheck = function() { 
     console.log("this is firing") 
    } 
    $scope.postreq = $http({ 
     method: "post", 
     url: "/", 
     data: { 
      user: "Junior", 
      password: "Thisispassword" 
     } 
    }).success(function() { 
     console.log("User posted to the database") 
    }); 
}; 

index.html

<!doctype html> 
<html> 
    <head> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"> 
    </script> 
    <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.6.0/pure-min.css"> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-route.min.js"></script> 
    <link rel="stylesheet" type="text/css" href="/css/styles.css"> 


    </head> 
    <body ng-app='LiveAPP'> 
    <div ng-view></div> 
    <script src="/controllers/mainCtrl.js"></script> 
    <script src="/controllers/signUpCtrl.js"></script> 
    <script src="/routes.js"></script> 
    </body> 

</html> 

routes.js

angular.module('LiveAPP', ['ngRoute','LiveAPP.main','LiveAPP.signUp']) 

.config(function($routeProvider, $httpProvider) { 
$routeProvider 
    .when('/', { 
    templateUrl : '/home.html', 
    controller : 'mainCtrl' 
    }) 
    .when('/signup',{ 
    templateUrl : '/signup.html', 
    controller : 'signUpCtrl' 
    }) 

}); 
+1

Вам нужно будет двигаться '$ HTTP ({...' внутри специфических функций .. – PSL

ответ

2

Я хотел бы предложить использовать сервис/завод по любому запросу $ HTTP, но в вашем случае, да вам нужно будет сделать это в функции, потому что в данный момент он вызывается немедленно.

$scope.postreq = function() { 
    $http({ 
     method: "post", 
     url: "/", 
     data: { 
      user: "Junior", 
      password: "Thisispassword" 
     } 
    }).success(function() { 
     console.log("User posted to the database") 
    }); 
} 
+0

Спасибо за ответ. В чем причина вы предлагаете, используя услугу или завод по $ HTTP запросов? – theamateurdataanalyst

+0

It все зависит от того, какое приложение вы планируете строить, я полагаю, и если данные будут передаваться через несколько контроллеров. Процитируем: «Абстрагирование вызова $ http, подобного этому, позволит вам повторно использовать этот код для нескольких контроллеров. становится необходимым, когда код, который взаимодействует с этими данными, становится более сложным ». Вы также можете воспользоваться обещаниями. –

Смежные вопросы