0

モジュール、コントローラー、サービス、およびディレクティブを取得した単純な angularJS アプリがあります。フォーム変数と構造を保持するテンプレートhtmlページとともに、正常に機能しているディレクティブを使用してメインhtmlページindex.page内に印刷します。今、フォームに ng-submit="submitForm() がありますが、送信を押してもデータが表示されません; Firefox の firebug では、未定義の $scope.submitForm.Employee と表示されます

詳細は次のとおりです。

Error: $scope.submitForm.employee is undefined
efController/$scope.submitForm@http://localhost:59662/App/EmployeeForm /efController.js:17:13
anonymous/fn@http://localhost:59662/Scripts/angular.min.js line 213 >    Function:2:218
Ic[b]</<.compile/</</e@http://localhost:59662/Scripts/angular.min.js:254:74
lf/this.$get</r.prototype.$eval@http://localhost:59662/Scripts/angular.min.js:133:309
lf/this.$get</r.prototype.$apply@http://localhost:59662/Scripts/angular.min.js:134:12
Ic[b]</<.compile/</<@http://localhost:59662/Scripts/angular.min.js:254:124
If@http://localhost:59662/Scripts/angular.min.js:35:365
Hf/d@http://localhost:59662/Scripts/angular.min.js:35:314

AngularFormsApp.js (モジュール)

var angularFormsModule = angular.module('angularFormsApp', []);

efController.js (コントローラー)

angularFormsModule.controller('efController',
function efController($scope, efService) {

    $scope.employee = efService.employee;

    $scope.departments = [
         "Engineering",
         "Marketing",
         "Finance",
         "Admin",
         "IT"
    ];

    $scope.submitForm = function () {

       ????????????????????
    }
});

efService.js (サービス)

angularFormsModule.factory('efService',
function efService() {

    return {
        employee: {
            fullName: "Khurram Zahid",
            notes: "The top employee",
            department: "IT",
            perkCar: true,
            perkStock: false,
            perkSixWeeks: true,
            payrollType: "none"
        }
    }
});

efDirective.js (ディレクティブ)

angularFormsModule.directive('employeeForm',
function () {

    return {
        restrict: 'E',
        templateUrl: 'App/EmployeeForm/efTemplate.html'
    }
});

efTemplate.html (フォーム)

<form class="form-horizontal" role ="form" ng-submit="submitForm()">

<div class="form-group">
    <label for="fullName" >Name</label>
    <input type="text" id="fullName" name="fullName" class="form-control" ng-model="employee.fullName" />
</div>

<div class="form-group">
    <label for="notes">Notes</label>
    <textarea name="notes" id="notes" class="form-control" rows="5" cols="50" ng-model="employee.notes"></textarea>
</div>

    <div class="form-group">
        <label for="department">Department</label>
        <select name="department" id="department" class="form-control" ng-model="employee.department" ng-options="dept for dept in departments">   </select>
    </div>

    <br />

    <span><b>Perks</b></span>

    <div class="checkbox">
        <label><input type="checkbox" value="perkCar" ng-model="employee.perkCar"/>Company Car</label>
    </div>

    <div class="checkbox">
        <label><input type="checkbox" value="perkStock" ng-model="employee.perkStock"/>Stock</label>
    </div>

    <div class="checkbox">
        <label><input type="checkbox" value="perkSixWeeks" ng-model="employee.perkSixWeeks"/>Six Weeks Leave</label>
    </div>

    <div class="radio-inline">
        <label><input type="radio" name="payrollType" value="W-2" ng-model="employee.payrollType"> W-2</label><br>
        <label><input type="radio" name="payrollType" value="1099" ng-model="employee.payrollType"> 1099</label><br>
        <label><input type="radio" name="payrollType" value="none" ng-model="employee.payrollType"> None</label>
    </div>

<br/><br />

<div class="form-group">
    <input type="submit" class="btn btn-primary" value="Submit" />
</div>

メイン HTML ページ (index.html)

<!DOCTYPE html>
<html ng-app="angularFormsApp">
<head>
 <title>Angular Form</title>
 <meta charset="utf-8" />
 <link href="Content/bootstrap.min.css" rel="stylesheet" />
  <script src="Scripts/angular.min.js"></script>
  <script src="App/AngularFormsApp.js"></script>
  <script src="App/EmployeeForm/efController.js"></script> 
  <script src="App/EmployeeForm/efDirective.js"></script>
  <script src="App/EmployeeForm/efService.js"></script>

 </head>
 <body class="container">

 <h1>Test AngularJS App Approach</h1>

 <div ng-controller="efController" >

    <employee-form />

</div>  

上記のコードは、employee の efService で定義されているすべてのデータを正しく表示します

4

1 に答える 1

1

コメントの 1 つで述べたように、関数自体のプロパティを取得することはできません。

$scope.submitForm.employee$scope.submitForm- は関数であるため、機能しません

フォームの「FormController」にアクセスしてできること。name="employeeData"フォームの名前と各入力の名前を指定する必要がありますname="perkStock"

次に、「efController」で、「FormController」である「employeeData」オブジェクトにアクセスできます。このオブジェクトには、便利なプロパティがたくさんあり$valid, $dirty , etc.ます:$viewValue, $modelValue, etc.

または、入力ごとに$scope.employee双方向バインディングがあるため、そのまま使用できますng-model="employee.perkStock"

これがあなたのコードでのPlunkの作業です。

コントローラから、フォーム データを出力します。

$scope.submitForm = function (employeeData) {

   console.log('Printing "FormController" object, which is accesible through $scope, or might be passed as submit function parametr.')
   console.log(employeeData); 
   console.log($scope.employeeData);

   console.log('Printing employee object, which is binded through ng-model ')
   console.log($scope.employee)
}
于 2016-01-08T17:42:18.537 に答える