2016-08-28 4 views
0

コース登録ポータルを作成しようとしています。すべてが正しく機能していましたが、学生がコースを登録するためにクリックしようとすると、ボタンは機能しません。ここに私のコードは次のとおりです。mongodb node.jsとangular jsを使用してコース登録ポータルを作成する方法

FIRST I CREATE A STUDENT SCHEMA 
var studentSchema = new Schema({ 
    firstname:{type: String, required: true}, 
    middlename:{type: String, required: true}, 
    lastname:{type: String, required: true}, 
    department:{ type: Schema.Types.ObjectId, ref: 'department', required: true }, 
    Courses:[{type: Schema.Types.ObjectId, ref: 'course'}], 
    }); 

学生スキーマはcourseSchema

var courseSchema = new Schema({ 
    title: {type: String, required: true}, 
    code:{type: String, required: true, unique: true}, 
    unit:{type: String, required: true}, 
    level:{type: String, required: true}, 
    department:{type: Schema.Types.ObjectId, ref: 'department'} 
}); 

の配列であるサブ文書のコースを持っている私もstudent.departmentがあるMongoDBの中のすべてのコースを取得するためのAPIを作成しますここcourse.departmentに等しいコード

router.get('/student/getcourses/:studentid', function(req, res){ 
if (!req.params.studentid) { 
    sendJSONresponse(res, 404, { 
     "message": "Not found, studentid is required" 
    }); 
     return; 
} 
Student 
.findOne({_id : req.params.studentid}) 
.exec(function(err, student){ 
    if (err) { 
     sendJSONresponse(res, 404, err); 
    }else{ 
     Course 
     .find({department : student.department}) 
     .populate('department') 
     .exec(function(err, courses){ 
      if (err) { 
       sendJSONresponse(res, 404, err); 
      }else{ 
       sendJSONresponse(res, 200, courses); 
      } 
     }); 
    } 
}); 
}); 

である私もここの学生のための特定のコースを登録するAPIを作成するコード

ですここangularjsとフロントエンドの
router.post('/student/courseReg/:studentid', function(req, res){ 
if (!req.params.studentid) { 
    sendJSONresponse(res, 404, { 
     "message": "Not found, studentid is required" 
    }); 
     return; 
} 
Student 
.findByIdAndUpdate(req.params.studentid, {$push: {regCourses:req.body.course}}) 
.exec(function(err, student){ 
    if (err) { 
     sendJSONresponse(res, 404, err); 
    }else{ 
     sendJSONresponse(res, 200, " registration successfull"); 
    } 
}); 
}); 

iは

$http.get('/api/student/getcourses/' + $scope.studentid) 
.success(function(data) { 
    $scope.courses = data ; 
    $scope.register = function(course){ 
      $http.post('/api/student/courseReg/' + $scope.studentid, course) 
      .success(function(data){ 
       console.log(data); 
      }); 
    }; 
}) 
.error(function (e) { 
    return e; 
}); 

、ここで何をしたかであるHTMLコード

<div class="table-responsive"> 
    <table class="table"> 
     <thead> 
      <tr> 
       <th>Title</th> 
       <th>Code</th> 
       <th>Department</th> 
       <th>level</th>      
      </tr> 
     </thead> 
      <tbody> 
       <tr ng-repeat="course in courses | filter: adminfilter"> 
        <td>{{course.name}}</td> 
        <td>{{course.code}}</td> 
        <td>{{course.department.name}}</td> 
        <td>{{course.level}}</td> 
        <td> 
         <button ng-click="register({{course._id}})" class="btn btn-info btn-xs">Register</button> 
        </td>      
        </tr> 
      </tbody> 
     </table> 
     </div 

、ここでは、出力 Outout

すべてですうまくいきますが、登録ボタンがクリックされても何も起こりません。私が間違ってやったことは誰でも助けてくれますか?

enter image description here

+0

NGクリック= ' "(course._id)を登録" とどこ'レジスタは 'のような補間を削除してください() 'メソッドを使用していますか? –

+0

ここでは、 '$ http.get('/api/student/getcourses/'+ $ scope.studentid) .success(function(data){ $ scope.courses = data; $ scope.register = function (コース){ $ http.post( '/ api/student/courseReg /' + $ scope.studentid、course) .success(function(data){ console.log(data); }); } ; }) .error(function(e){ return e; }); ' – Emibrown

+0

なぜあなたは$ http getコールの中でそれを定義しましたか?このようにして、この 'register()'メソッドを呼び出すことは決してありません。 –

答えて

0

あなたは$の範囲にregister()メソッドを呼び出したい場合は、宣言は次のようにする必要があります。
HTMLコード

 <tbody> 
      <tr ng-repeat="course in courses | filter: adminfilter"> 
       <td>{{course.name}}</td> 
       <td>{{course.code}}</td> 
       <td>{{course.department.name}}</td> 
       <td>{{course.level}}</td> 
       <td> 
        <button ng-click="register(course._id)" class="btn btn-info btn-xs">Register</button> 
       </td>      
       </tr> 
     </tbody> 

my.controller.js

angular.module('myapp').controller('myController', function($scope,$http){ 

    $scope.studentid = .... 

    $http.get('/api/student/getcourses/' + $scope.studentid) 
    .success(function(data) { 
     $scope.courses = data ; 
    }) 
    .error(function (e) { 
    return e; 
    }); 

    $scope.register = function(course){ 
     $http.post('/api/student/courseReg/' + $scope.studentid, {course:course}) //watch out *data* field of $http, it can be either string or an object 
     .success(function(data){ 
      console.log(data); 
     }); 
    }; 
    }); 
+0

ng-click = "register(course._id)"を使用していない場合はどうすればよいですか?他の方法でcourse._idをregister()関数に渡すことができます – Emibrown

+0

何をする?それだけを明確にして、私はあなたに他の選択肢を提案することができます。 –

+0

私の質問を見たら、私は2つのスキーマstudentSchemaとcourseSchemaを持っています。登録ボタンがクリックされたときに、対応するコースのコースIDをstudent.coursesフィールドの配列にプッシュする必要があります。 – Emibrown

関連する問題