我的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/