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

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


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

我为此有一个工厂/服务设置,但是我不知道如何在其中获取commentBox值,以供其他控制器使用。

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

我对Angular还是很陌生,并尝试将范围信息作为参数发送给facory。

var saved = {};

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


然后让我的控制器在单击按钮时发送范围信息,

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


但是,是的,没有成功。

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

最佳答案

您需要将保存的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

}])


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

关于javascript - AngularJS- Controller 之间共享作用域值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33483819/

10-12 03:56