Canttouchit
Canttouchit

Reputation: 3159

Cannot create an object using factory

My code:

webApp.controller ('entityCtrl', function ($scope, Entity) {  
    $scope.x = new Entity('1','3343','32434');
});


webApp.factory('Entity',function(){

  var _id,
      _created,
      _updated;


  //constructor

  function Entity(id,created,updated){


      this._id = id;
      this._created = created;
      this._updated = updated;

      return this;
  }

  var save = function (){
      console.log('save');
  };

  var update = function () {
      console.log('update');
  };

  var _delete = function () {
      console.log('delete');
};

  return {

      save: save,
      update: update,
      delete: _delete
  }

});

The Error I get:

TypeError: object is not a function
at new <anonymous> (http://localhost/webApp/trunk/htdocs/js/rw/controllers.js:12:16)
at invoke (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:2902:28)
at Object.instantiate (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:2914:23)
at $get (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:4805:24)
at $get.i (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:4384:17)
at forEach (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:137:20)
at nodeLinkFn (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:4369:11)
at compositeLinkFn (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:4015:15)
at compositeLinkFn (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:4018:13)
at publicLinkFn (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:3920:30)    angular.js:5754

What am I doing wrong?

Upvotes: 0

Views: 1669

Answers (1)

lpiepiora
lpiepiora

Reputation: 13749

This has actually little to do with Angular. You're returning an Object (as the error says) from the method. You may want to return your Entity function.

Consider this example:

webApp.controller ('entityCtrl', function ($scope, Entity) {  
    $scope.x = new Entity('1','3343','32434');
});

webApp.factory('Entity',function(){
  var Entity = function(id,created,updated){
      this._id = id;
      this._created = created;
      this._updated = updated;
  };
  Entity.prototype.save = function (){
      console.log('save');
  };
  Entity.prototype.update = function () {
      console.log('update');
  };
  Entity.prototype._delete = function () {
      console.log('delete');
  };

  return Entity;
});

Btw. you may want to watch this video, on how the Object Oriented JS works : http://youtu.be/PMfcsYzj-9M

Upvotes: 2

Related Questions