2015-11-02 111 views
1

我有一个textarea在我的HTML这样的:AngularJS - 控制器之间的共享范围值

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

要访问此我​​只是在我的控制器使用“$ scope.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。

+0

是否有任何理由不能做ng-Change = factoryProduct.addComment(commentBox),其中factoryProduct是Controller从Factory创建的实例?我假设你说你使用的工厂是这样的http://www.sitepoint.com/tidy-angular-controllers-factories-services/ –

+0

不熟悉ng-change,从来没有使用它。但我有一个路径,可以控制哪些控制器用于什么html。我在第一页有ng-model,我需要在我的页面2上获得它的价值。为此,我尝试将控制器1的值放入工厂,因此控制器2可以访问它。 – qua1ity

+0

我认为你只需要像ng-change =“vm.addComment(commentBox)”这样的东西,其中vm.addComment做类似yourService.setCurrentComment(newValue)的东西。 –

回答

1

您需要在您的工厂恢复已保存的变种

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 

}]) 

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

+0

我确实返回了保存的变量以及其他需要返回的内容。我只是不知道如何将范围值添加到工厂,以便其他控制器可以访问它。 – qua1ity

+0

@ qua1ity我更新了我的答案,检查它 – levi

+0

感谢您的回复,我的工厂已经注入控制器。我做了一个简单的jsfiddle来缩小我的问题。 http://jsfiddle.net/aw5p5hyr/ MyCtrl2如何使用工厂获得commentBox的值(如在MyCtrl1中)? – qua1ity

相关问题