Javascript 角度控制器无法从服务读取更新。有什么建议吗?
在我的角度服务中,我有很多属性。这些属性链接到控制器 服务:Javascript 角度控制器无法从服务读取更新。有什么建议吗?,javascript,angularjs,angular-services,angular-controller,Javascript,Angularjs,Angular Services,Angular Controller,在我的角度服务中,我有很多属性。这些属性链接到控制器 服务: angular.module('...') .factory('PollServ', function PollServ($http, ...) { var service = { question: '', votes: [[]] } ... // make http request to API
angular.module('...')
.factory('PollServ', function PollServ($http, ...) {
var service = {
question: '',
votes: [[]]
}
...
// make http request to API
var request = $http({ ...
// once the value is retrieved, update properties
request.then(function (res) {
service.question = res.data.question;
...
}
控制器:
angular.module('...')
.controller('PollCtrl', function PollCtrl(..., PollServ) {
$scope.question = PollServ.question;
$scope.votes = PollServ.votes;
...
现在,虽然投票被适当地更新,但问题不是这样。我没有做任何不同的事情,除了投票
是一个数组,而问题
只是一个常规字符串。我认为数组可能与动态更新有关,但与简单字符串无关
我如何才能让它工作,而不必将字符串也转换为数组?你自己说的-问题是
字符串,因此不会在你的控制器/视图中更新
你能做的就是把问题变成一个对象。例如:
工厂内
var service = {
question: {
name: ''
},
votes: [[]]
}
...
service.question.name = res.data.question;
然后,您需要将视图中的引用更改为question.name
,因为您从未从$scope.question=PollServ.question代码>一旦分配它,当它在服务中更改时,它将不会被更新,因为您正在分配字符串值-您需要将其包装到对象中,或者使用监视
获得有关此值更改的通知。一个好的方法是将所有值包装在一个模型对象中,然后angular将确保触发其中属性的任何用法updates@OvidiuDolha哦,那真的很有趣。谢谢你,我会尝试一下。@OvidiuDolha我尝试过创建一个模型对象,但是,这似乎也不能更新问题。在我的服务中,现在我有var服务={model:{question:'',投票:[[]]}我错过什么了吗?谢谢你。。。但是如果我尝试@OvidiuDolha的方法,即所有属性都在一个模型属性中,该怎么办。这是否有效?这基本上是相同的方法-你只是在不同的地方包装。所以,是的,它应该起作用。