2015-05-17 3 views
1

Хорошо, у меня есть 2 угловых приложения. Один автоматически, а другой загружается.Ошибка AngularJs: Аргумент 'FormController' не является функцией

Теперь все работает нормально, но в основном в консоли у меня есть эта ошибка:

Error: Argument 'FormController' is not a function, got undefined at Error (native) at cb ( etc...

Но форма работы я тестировал, Тхо ошибка все еще там. Теперь дело в том, что я хочу разместить форму над div ng-view, но когда я это делаю, ng-view div перестает работать.

Когда я удалил ng-controller = "FormController" из формы, тогда появляются страницы div ng-view, но форма явно теряет его функцию.

Возможно, кто-то более опытный может выявить проблему или предложить возможную альтернативу.

Газа кода.

<html ng-app="kaidoweb"> 
<head> 
    <!-- add javascripts --> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
    <script src="js/angular.min.js"></script> 
    <script src="js/app.js"></script> 
    <script src="js/controllers.js"></script> 

    <script type="text/javascript"> 

    // creating Angular Module 
    var websiteApp = angular.module('websiteApp', []); 
    // create angular controller and pass in $scope and $http 
    websiteApp.controller('FormController',function($scope, $http) { 
    // creating a blank object to hold our form information. 
    //$scope will allow this to pass between controller and view 
    $scope.formData = {}; 
    // submission message doesn't show when page loads 
    $scope.submission = false; 
    // Updated code thanks to Yotam 
    var param = function(data) { 
     var returnString = ''; 
     for (d in data){ 
      if (data.hasOwnProperty(d)) 
       returnString += d + '=' + data[d] + '&'; 
     } 
     // Remove last ampersand and return 
     return returnString.slice(0, returnString.length - 1); 
    }; 
    $scope.submitForm = function() { 
    $http({ 
    method : 'POST', 
    url : 'process.php', 
    data : param($scope.formData), // pass in data as strings 
    headers : { 'Content-Type': 'application/x-www-form-urlencoded' } // set the headers so angular passing info as form data (not request payload) 
    }) 
    .success(function(data) { 
     if (!data.success) { 
     // if not successful, bind errors to error variables 
     $scope.errorName = data.errors.name; 
     $scope.errorEmail = data.errors.email; 
     $scope.errorTextarea = data.errors.message; 
     $scope.submissionMessage = data.messageError; 
     $scope.submission = true; //shows the error message 
     } else { 
     // if successful, bind success message to message 
     $scope.submissionMessage = data.messageSuccess; 
     $scope.formData = {}; // form fields are emptied with this line 
     $scope.submission = true; //shows the success message 
     } 
    }); 
    }; 
}); 

angular.element(document).ready(function() { 
     angular.bootstrap(document.getElementById('websiteApp'), ['websiteApp']); 
    }); 
    </script> 
</head> 
<body> 

    <div style="position:relative"> 
     <div ng-view></div> 
    </div> 

    <div id="websiteApp" class="contactRow"> 

     <img class="close" src="img/close.png" ng-click="closeForm()" /> 
     <form ng-submit="submitForm()" ng-controller="FormController" novalidate class="contactForm" name="form" ng-hide="loaded"> 
      <input class="input" type="text" name="name" placeholder="SINU NIMI" ng-model="formData.name" ng-class="{'error' : errorName}"> 
      <input class="input2" type="email" name="email" placeholder="SINU E-MAIL" ng-model="formData.email" ng-class="{'error' : errorEmail}"> 
      <div ng-class="{'submissionMessage' : submission}" ng-bind="submissionMessage"></div> 
     </form> 

    </div> 

</body> 
</html> 

EDIT! дополнительный код как требуется! app.js

'use strict'; 

// angular.js main app initialization 
var app = angular.module('kaidoweb', []). 
    config(['$routeProvider', function ($routeProvider) { 
     $routeProvider. 
     when('/', { 
     templateUrl: 'pages/index.html', 
     activetab: 'index', 
     controller: HomeCtrl 
     }). 
     when('/works', { 
      templateUrl: 'pages/works.html', 
      controller: PrivacyCtrl, 
      activetab: 'works' 
     }). 
     otherwise({ redirectTo: '/' }); 
    }]).run(['$rootScope', '$http', '$browser', '$timeout', "$route", function ($scope, $http, $browser, $timeout, $route) { 

     $scope.$on("$routeChangeSuccess", function (scope, next, current) { 
      $scope.part = $route.current.activetab; 
     }); 

    }]); 

app.config(['$locationProvider', function($location) { 
    $location.hashPrefix('!'); 
}]); 

И controller.js

'use strict'; 

// optional controllers 
function HomeCtrl($scope, $http) { 
} 

function ProjectCtrl($scope, $http) { 
} 

function PrivacyCtrl($scope, $http, $timeout) { 
} 

function AboutCtrl($scope, $http, $timeout) { 
} 
+1

Я предлагаю использовать другое имя. Угловой уже есть FormController https://docs.angularjs.org/api/ng/type/form.FormController – HankScorpio

+0

'ng-app =" kaidoweb "' в index.html, но 'angular.module ('websiteApp')'. это проблема? –

+0

@HankScorpio просто меняет FormController на другое имя, похоже, не имеет эффекта. Shehryar ng-app = "kaidoweb" уже из файла app.js. – rKaiser

ответ

0

Почему вам нужно второе угловое приложение для формы? Не было бы лучше поставить FormController внутри вашего «kaidoweb» -App?

var app = angular.module('kaidoweb', []); 
//your code goes here 

app.config(['$locationProvider', function($location) { 
    $location.hashPrefix('!'); 
}]); 

app.controller('FormCrl', ['$scope', '...' function($scope, ...){ 
    // FormController code goes here 
}]); 

Затем в HTML

<body> 

<div style="position:relative"> 
    <div ng-view></div> 
</div> 

<div class="contactRow" ng-controller="FormCtrl"> 

    <img class="close" src="img/close.png" ng-click="closeForm()" /> 
    <form ng-submit="submitForm()" ng-controller="FormController" novalidate class="contactForm" name="form" ng-hide="loaded"> 
     <input class="input" type="text" name="name" placeholder="SINU NIMI" ng-model="formData.name" ng-class="{'error' : errorName}"> 
     <input class="input2" type="email" name="email" placeholder="SINU E-MAIL" ng-model="formData.email" ng-class="{'error' : errorEmail}"> 
     <div ng-class="{'submissionMessage' : submission}" ng-bind="submissionMessage"></div> 
    </form> 

</div> 

</body> 
+0

О app.controller ('FormCrl') Что я должен написать в двух пространствах «...». Также необходимо изменить код FormController в любом случае, кроме готового документа, который я предполагаю, если делать такие вещи, как вы предлагали, не требуется. Он не работал и дает сообщение об ошибке в строке app.controller (FormCrl ') .... Извините, если вы можете быть более конкретным, я не эксперт по этому вопросу. – rKaiser

+0

Для «...» Вы можете добавить любого провайдера, который вам нужен, например $ rootScope или $ http и т. Д. В вашем случае замените точки на $ http. Вам не нужно менять свой код контроллера. – riXon

0

Спасибо за дополнительный код, я считаю, нужно объявить контроллер в вашем приложении, как это:

app.controller('yourCtrl'..... 
+0

Отправленный дополнительный код по запросу – rKaiser

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