AngularJS - 在控制器之间共享范围值

时间:2015-11-02 17:51:52

标签: javascript html angularjs

我的HTML中有一个textarea,如下所示:

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

要访问它,我只需在我的控制器中使用“$ scope.commentBox”。但我的问题是,如何在不同的控制器中访问相同的commentBox?

我确实有一个工厂/服务设置用于此目的,但我无法弄清楚如何在那里获取commentBox值,以便我的其他控制器使用它。

在我的工厂里我有一个对象var saved = {},我想添加一个名为“comment”的属性,其中包含textarea中的任何值。像这样saved.comment = commentbox然后从另一个控制器访问该值。

我还是Angular的新手,并试图将参数中的范围信息发送到工厂。

var saved = {};

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

然后让我的控制器通过点击按钮发送范围信息,

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

但是,这没有成功。

请注意,我需要在工厂内工作,而不是在HTML中使用其他ng-controller。

1 个答案:

答案 0 :(得分:1)

您需要在工厂中退回已保存的var

var saved = {}; 


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

return saved

这里有一个使用服务的例子

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

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

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

  return {
    addComment: addComment,
    getComment: getComment
  };

});

在控制器中注入工厂/服务

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

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

}])

然后在您的控制器中,您可以注入工厂/服务并访问已保存的数据。但请记住,如果您刷新页面,数据将会丢失,因此,为避免这种情况,您应该在数据库上保留数据。