Ошибка типа: не удается прочитать свойство ‘0’, равное нулю

#javascript #angularjs #node.js #sails.js #typeerror

#javascript #angularjs #node.js #sails.js #ошибка типа

Вопрос:

Я работаю над проектом NodeJS, который использует Sails.js в качестве фреймворка.

Чего я пытаюсь достичь, так это системы разрешений, в которой разрешения для каждой группы устанавливаются флажками, я использую типичную форму с AngularJS.

Когда я нажимаю кнопку «Sumbit», это выдает эту ошибку на консоли моего браузера:

 angular.1.3.js:11594 TypeError: Cannot read property '0' of null
at $parseFunctionCall (angular.1.3.js:12333)
at callback (angular.1.3.js:22949)
at Scope.$eval (angular.1.3.js:14383)
at Scope.$apply (angular.1.3.js:14482)
at HTMLFormElement.<anonymous> (angular.1.3.js:22954)
at HTMLFormElement.eventHandler (angular.1.3.js:3011)(anonymous function) @ angular.1.3.js:11594
  

Любая помощь с этим была бы высоко оценена.

РЕДАКТИРОВАТЬ Забыл код:
Вот код, который получает информацию, отправленную из формы

 createGroup: function(req, res) {
Groups.create({
  groupName: req.param('groupName'),
  canViewUsers: req.param('canViewUsers'),
  canEditUsers: req.param('canEditUsers'),
  canPromoteToStaff: req.param('canPromoteToStaff'),
  canViewNotes: req.param('canViewNotes'),
  canEditPermissions: req.param('canEditPermissions')
});
  

Вот код, который перехватывает информацию и отправляет ее в функцию create

 angular.module('GroupsModule').controller('GroupsController', ['$scope', '$http', 'toastr', function($scope, $http, toastr) {

$scope.createGroup = {
    loading: false
  };

$scope.createGroupForm = function(){

// Set the loading state (i.e. show loading spinner)
$scope.createGroup.loading = true;


// Submit request to Sails.
$http.post('/createGroup', {
  groupName: $scope.createGroupForm.groupName,
  canViewUsers: $scope.createGroupForm.canViewUsers,
  canEditUsers: $scope.createGroupForm.canEditUsers,
  canPromoteToStaff: $scope.createGroupForm.canPromoteToStaff,
  canViewNotes: $scope.createGroupForm.canViewNotes,
  canEditPermissions: $scope.createGroupForm.canEditPermissions
})
  .then(function onSuccess(sailsResponse){
    window.location = '/groups';
  })
  .catch(function onError(sailsResponse){

    // Handle known error type(s).
    // If using sails-disk adpater -- Handle Duplicate Key
    var groupAlreadyExists = sailsResponse.status == 409;

    if (groupAlreadyExists) {
      toastr.error('That group already exists', 'Error');
    }

  })
  .finally(function eitherWay(){
    $scope.createGroup.loading = false;
  })
  

В сообщении есть закрывающие скобки, но они неправильно форматируются.

И, наконец, вот код для самой формы:

 <!--STYLES-->
<link rel="stylesheet" href="/styles/angular-toastr.css">
<link rel="stylesheet" href="/styles/bootstrap.3.1.1.css">
<link rel="stylesheet" href="/styles/importer.css">
<link rel="stylesheet" href="/styles/style.css">
<link rel="stylesheet" href="/styles/theme.css">
<link rel="stylesheet" href="/styles/theme.min.css">
<!--STYLES END-->
<body ng-app="DashboardModule" ng-controller="DashboardController" ng-cloak>
<div class="bs-docs-section clearfix">
  <div class="row">
    <div class="bs-component">
      <nav class="navbar navbar-default">
        <div class="container-fluid">
          <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
              <span class="sr-only">Toggle navigation</span>
              <span class="icon-bar"></span>
              <span class="icon-bar"></span>
              <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="/">Insomnia eSports</a>
          </div>

          <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
              <li><a href="/groups"><i class="fa fa-users" aria-hidden="true"></i> Group Management </a></li>
            </ul>

            <!--
            <form class="navbar-form navbar-left" role="search">
              <div class="form-group">
                <input type="text" class="form-control" placeholder="Search">
              </div>
              <button type="submit" class="btn btn-default">Submit</button>
            </form>
            -->
            <ul class="nav navbar-nav navbar-right">
              <li><a href="/logout">Sign Out</a></li>
            </ul>
          </div>
        </div>
      </nav>
    </div>
  </div>
</div>

<form ng-submit="createGroupForm()" id="create-group-form" class="form-signin" name="createGroupForm">
  <h2 class="form-signin-heading">Create an account</h2>
  <div class="row">

    <!-- Group Name -->
      <label>Group Name</label>
      <input type="text" class="form-control" placeholder="Group Name" name="groupName" ng-model="createGroupForm.name" ng-maxlength="25" required>

    </div>

    <!-- Can View Users -->
      <label>View Users?</label>
      <input type="checkbox" name="canViewUsers" ng-model="canViewUsers.value">

    <!-- Can View Users -->
      <label>Edit Users?</label>
      <input type="checkbox" name="canEditUsers" ng-model="canEditUsers.value">

    <!-- Can Promote To Staff -->
      <label>Promote to Staff?</label>
      <input type="checkbox" name="canPromoteToStaff" ng-model="canPromoteToStaff.value">


    <!-- Can Promote To Staff -->
      <label>Can view notes?</label>
      <input type="checkbox" name="canViewNotes" ng-model="canViewNotes.value">

    <!-- Can Promote To Staff -->
      <label>Can edit permissions?</label>
      <input type="checkbox" name="canEditPermissions" ng-model="canEditPermissions.value">

  <br/>

  <!-- Disable signup button until the form has no errors -->
  <button class="btn btn-success btn-lg btn-block" type="submit" ng-disabled="createGroupForm.$invalid">
    <span ng-show="!createGroupForm.loading">Create Group</span>
    <span class="overlord-loading-spinner fa fa-spinner" ng-show="createGroupForm.loading" ></span>
    <span ng-show="createGroupForm.loading">Preparing your new group...</span>
  </button>

  <input type="hidden" name="_csrf" value="<%= _csrf %>" />
</form>
<!--SCRIPTS-->
<script src="/js/dependencies/sails.io.js"></script>
<script src="/js/dependencies/angular.1.3.js"></script>
<script src="/js/dependencies/Base64.js"></script>
<script src="/js/dependencies/angular-toastr.js"></script>
<script src="/js/dependencies/compareTo.module.js"></script>
<script src="/js/public/signup/SignupModule.js"></script>
<script src="/js/public/groups/GroupsModule.js"></script>
<script src="/js/private/dashboard/DashboardModule.js"></script>
<script src="/js/public/homepage/HomepageModule.js"></script>
<script src="/js/private/dashboard/DashboardController.js"></script>
<script src="/js/public/groups/GroupsController.js"></script>
<script src="/js/public/homepage/HomepageController.js"></script>
<script src="/js/public/signup/SignupController.js"></script>
<!--SCRIPTS END-->
</body>
  

Комментарии:

1. покажите нам код…

2. Пожалуйста, добавьте соответствующий код (возможно, шаблон и контроллер / компонент).

3. Похоже, вы пытаетесь получить доступ к одному значению, как если бы это был массив, но опять же, ничего не можете сказать без фрагмента кода.

4. @TomaszKaminski Я отредактировал свой код, извините за ужасное форматирование, я еще не привык к форматированию StackOverflow

5. Я добавил код из hastebin, используя SO форматирование довольно простое … вставьте код, выберите его, нажмите «code» в редакторе и все. Что касается вашей проблемы, до сих пор неясно, где и почему это происходит, я предполагаю, что это связано с ответом.

Ответ №1:

Это было решено мной неправильно с использованием $ scope в createGroupForm вместо просто createGroup. Исправленный фрагмент кода приведен ниже:

Вместо:

 $scope.createGroupForm.canViewUsers
  

Использовать:

 $scope.createGroup.canViewUsers