qua1ity
qua1ity

Reputation: 623

AngularJS - Share scope value between controllers

I have a textarea in my HTML like this:

<textarea ng-model="commentBox"></textarea>

To access this i simply use "$scope.commentBox" in my controller. But my question is, how do i access the same commentBox within a different controller?

I do have a factory/service setup for this purpose, but i cant figure out how to get the commentBox value in there, for my other controller to use it.

In my factory i have an object var saved = {} and I want to add a property called "comment", with the value of whatever is inside the textarea. Like this saved.comment = commentbox And then access that value from the other controller.

I'm still new at Angular and tried to send the scope information in a parameter to the facory.

var saved = {};

factory.addComment = function (commentbox) {
  saved.comment = commentbox
}

Then have my controller send the scope information on a button click,

$scope.testFunction = function () {
  myFactory.addComment($scope.commentBox);
} 

But yeah, that did not work out.

Note that i need this to work within the factory, and not by using another ng-controller in the HTML.

Upvotes: 1

Views: 95

Answers (1)

levi
levi

Reputation: 22697

You need to return your saved var in your factory

var saved = {}; 


factory.addComment = function (commentbox) {
  saved.comment = commentbox
}

return saved

Here there is an example using a service

app.service('fakeService', function() {
  var savedData = {};

  var addComment = function(newComment) {
      savedData.commnet = newComment;
  };

  var getComment = function(){
      return savedData.comment;
  };

  return {
    addComment: addComment,
    getComment: getComment
  };

});

To inject a factory/service in your controller

app.controller('fakeController', ['$scope','yourFactory',function ($scope, yourFactory) {

   console.log(yourFactory.comment) // here you should log saved comment

}])

Then in your controller, you can inject the factory/service and access to saved data. But remember, is your refresh your page, data will be lost, so, to avoid that, you should persist data on your DB.

Upvotes: 1

Related Questions