Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html ng-app="studentApp">
<head>
<meta name="description" content="Validation example" />
<script src="http://code.jquery.com/jquery.min.js"></script>
<link href="http://getbootstrap.com/2.3.2/assets/css/bootstrap.css" rel="stylesheet" type="text/css" />
<link href="http://getbootstrap.com/2.3.2/assets/css/bootstrap-responsive.css" rel="stylesheet" type="text/css" />
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
  <script src="http://code.angularjs.org/1.3.15/angular-route.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body ng-controller="StudentCtrl as studentList">
  <ul>
    <li ng-repeat="student in studentList.students"><a href="#/students/{{student.id}}">{{student.name}}</a></li>
  </ul>
  <ng-view></ng-view>
</body>
  <script id="showStudent.html" type="text/ng-template">
    <dl>
      <dt>{{ctrl.student.name}}</dt>
      <dd ng-show="ctrl.student.email"><img ng-src="http://avatars.io/email/{{ctrl.student.email}}" /></dd>
    </dl>
    <a href="#/students/{{ctrl.student.id}}/edit">Edit<a>
  </script>
  <script id="editStudent.html" type="text/ng-template">
  <form name="studentForm" class="form-vertical" novalidate="true">
    <div class="control-group" ng-class="{error: studentForm.name.$invalid}">
      <label for="name" class="control-label">Name</label>
      <input name="name" ng-model="ctrl.student.name" type="text" required>
      <span class="inline-help text-error" ng-show="studentForm.name.$error.required">You need a name!</span>
    </div>
    <div class="control-group" ng-class="{error: studentForm.email.$invalid}">
      <label for="email" class="control-label">Email</label>
      <input name="email" type="text" ng-model="ctrl.student.email" ng-required="ctrl.student.name" />
    </div>
    <div class="form-actions">
      <input type="submit" class="btn primary" value="Save" ng-click="ctrl.saveStudent()">
      <input type="button" class="btn" value="Cancel">
    </div>
  </form>
  </script>
</body>
</html>
 
var studentApp = angular.module("studentApp", ["ngRoute"]);
studentApp.factory("Student", function() {
  return {
    students: [{
      id: 1,
      name: "Joe Blow",
      email: "chris@gaslight.co"
    }, {
      id: 2,
      name: "John Doe",
      email: ""
    }],
    
    getStudent: function(id) {
      return _.findWhere(this.students, {id: Number(id)});
    }
  };
});
studentApp.controller("StudentCtrl", function(Student) {
  this.students = Student.students;
});
studentApp.controller("ShowStudentCtrl", function(Student, $routeParams) {
  this.student = Student.getStudent($routeParams.id);
});
studentApp.controller("EditStudentCtrl", function(Student, $routeParams, $location) {
  this.student = Student.getStudent($routeParams.id);
  this.saveStudent = function() {
    $location.path("/students/" + this.student.id);
  };
});
studentApp.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
      when('/students/:id/edit', {templateUrl: 'editStudent.html', controller: "EditStudentCtrl as ctrl"}).
      when('/students/:id', {templateUrl: 'showStudent.html', controller: "ShowStudentCtrl as ctrl"});
  }]);
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
gaslightpro
0viewers