页面加载后立即执行控制器操作

时间:2015-08-10 23:02:16

标签: ruby-on-rails angularjs devise coffeescript haml

我正在使用带有设计的rails,并使用ng-file-upload进行角度调整。 我有两个问题。首先,一旦我访问网站的根目录,就会执行POST请求,尝试使用500状态代码响应的结果登录用户。 它说它无法找到users_url,这是有道理的,因为我的路线中没有,这个请求被解雇是多么奇怪。

同样使用ng-file-upload,当我加载一个对话框来上传文件时,对话框会加载并发送请求直接上传文件。没有等待。

为什么会这样? 这是所有这些行动中出现的不同文件:

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

1 个答案:

答案 0 :(得分:1)

从我在这里看到的情况来看,我认为当对话框打开时,$watch上的模型更改会触发avatar很有可能触发ngf-change="myFunction()"。您可以非常轻松地删除该手表,并使该功能更受事件驱动。查看ng-file-uplpad文档,看起来有一个指令属性来指定调用自定义函数,如$scope.$watch('avatar', function(avatar) { $scope.upload($scope.avatar); });

SearchCtrl

对于问题的第二部分,我很想知道在着陆页上调用的Router.current()中有哪些代码,POST请求很容易与那里的内容相关