2015-08-10 3 views
0

Я использую рельсы с устройством и угловые с загрузкой ng-файла. У меня две проблемы. сначала, как только я пойду в корень веб-сайта, выполняется запрос POST, чтобы попытаться войти в систему с результатами в ответ на код состояния 500. В нем говорится, что он не может найти users_url, что имеет смысл, потому что у меня нет на моих маршрутах, что странно, так это то, что запрос уволен.Действия контроллера, выполняемые, как только страница загружается

Также, используя загрузку ng-файла, при загрузке диалогового окна для загрузки файла диалог загружается и отправляет запрос на загрузку файла напрямую. Без ожидания между ними.

Почему это происходит? THis являются дифферент файлы, находящиеся excuted во всех этих действиях:

app.coffee

app = angular.module("inkorporated", ['ui.router', 'templates', 'rails', 'Devise', 'ngFileUpload', 'ngDialog']) 
    .config(['$stateProvider','$urlRouterProvider', 
    ($stateProvider, $urlRouterProvider)-> 
    $stateProvider 
     .state('home', { 
     url: '/home' 
     templateUrl: 'home/_home.html' 
     controller: 'SearchCtrl' 
     }) 
     .state('login', { 
     url: '/login' 
     templateUrl: 'auth/_login.html' 
     controller: 'AuthCtrl' 
     onEnter: ['$state', 'Auth', ($state, Auth)-> 
      Auth.currentUser().then -> 
      $state.go('home') 
      return 
      return 
     ] 
     }) 
     .state('register', { 
     url: '/register' 
     templateUrl: 'auth/_register.html' 
     controller: 'AuthCtrl' 
     onEnter: ['$state', 'Auth', ($state, Auth)-> 
      Auth.currentUser().then -> 
      $state.go('home') 
      return 
      return 
     ] 
     }) 
     .state('user', { 
     url: '/user/{id}' 
     templateUrl: 'users/_user.html' 
     controller: 'UserCtrl' 
     }) 
    $urlRouterProvider.otherwise('home') 
    return 
]) 

navCtrl.coffee

angular.module("inkorporated").controller('NavCtrl', ['$scope', '$state', 'Auth', 
    ($scope, $state, Auth)-> 

    $scope.config = { 
     headers: { 
     'X-CSRF-TOKEN': $('meta[name=csrf-token]').attr("content") 
     } 
    } 

    $scope.signedIn = Auth.isAuthenticated 
    $scope.logout = Auth.logout 

    Auth.currentUser().then(
     (user)-> 
     if !!user.email 
      $scope.user = user 
     else 
      $scope.user = {} 
     return 
    ) 

    $scope.$on('devise:new-registration', 
     (e, user)-> 
     $scope.user = user 
     return 
    ) 

    $scope.$on('devise:login', 
     (e, user)-> 
     if !!user.email 
      $scope.user = user 
     else 
      $scope.user = {} 
     return 
    ) 

    $scope.$on('devise:logout', 
     (e, user)-> 
     $scope.user = {} 
     return 
    ) 
    return 
]) 

avatarCtrl.coffee

angular.module("inkorporated").controller("AvatarCtrl", ["$scope", "$stateParams", "Upload", "ngDialog" 
    ($scope, $stateParams, Upload, ngDialog)-> 

    $scope.$watch('avatar', 
     (avatar)-> 
     $scope.upload($scope.avatar) 
     return 
    ) 

    $scope.upload = (avatar)-> 
     Upload.upload({ 
     url: "users/avatar", 
     fields: { 'id': $stateParams.id } 
     file: avatar 
     }) 
     .success(
     (data, status, headers, config)-> 
      $scope.closeThisDialog() 
      return 
    ) 
     return 
    return 
]) 

application.html.haml

!!! 
%html{ "ng-app" => "inkorporated" } 
    %head 
    %meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/ 
    %meta{ name: "viewport", content: "width=device-width, initial-scale=1" }/ 
    %title Inkorporated 
    = stylesheet_link_tag 'application', media: 'all' 
    = javascript_include_tag 'application' 
    = csrf_meta_tags 
    %body 
    .container-fluid 
     %header{ "ng-include" => "'nav/_nav.html'" } 
    #page-content.container  
     %ui-view 
+0

Непонятно, что означает 'не может найти users_url'. Предположительно это URL-адрес, используемый для запроса, и этот запрос будет вызван navCtrl. Что касается загрузки, то не понятно, что означает «нет ожидания в промежутке» – charlietfl

+0

Невозможно найти users_url, это не важная часть, это то, что действие запускается сразу после загрузки страницы. Как только я перехожу на сайт 'localhost: 3000', я вижу, что запрос' POST' запускается на 'http: // localhost: 3000/users/sign_in.json', и я не знаю, почему это продолжается. Другое дело, что когда я загружаю диалог, использующий 'ng-file-upload', он пытается загрузить файл сразу же после открытия диалога, отправив также запрос на http: // localhost: 3000/users/avatars 'который является адресом, который я настроил для изменения аватара –

+0

, вероятно, внутри' Auth.currentUser() ', вызываемого в navBarCtrl. Однако код не показан для этого. Ваша загрузка привязана к '$ watch' ... должна проверять наличие newValue на том, что возможно или передумать логику загрузки – charlietfl

ответ

1

Из того, что я могу видеть здесь, я думаю, что есть очень хороший шанс, что $watch в настоящее время инициируется при изменении модели на avatar, когда открывается ваш диалог. Вы можете легко удалить эти часы и сделать эту функцию более управляемой событием. Глядя на нг-файлы uplpad документации, это выглядит как есть директива атрибут, чтобы указать вызов пользовательской функции, как ngf-change="myFunction()"

$scope.$watch('avatar', function(avatar) { 
    $scope.upload($scope.avatar); 
}); 

Для второй части вашего вопроса, мне интересно посмотреть, что код находится в SearchCtrl вызывается на целевую страницу, что запрос POST может быть легко связан с чем-то там

+0

SearchCtrl пуст, это просто декларация контроллера –

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