如何在Angular中跨多个控制器共享数据和计算



这是我使用AngularJS的第一个项目,不幸的是,它并不是一个温和的介绍。可以说,我不得不"立即行动"。

我的任务是建立一个可定制的调查表格,其中的问题定义是从数据库加载的。我已经设法得到这个工作,在很大程度上,感谢这个角动态表单项目。现在,我需要为调查问题添加加权评分,以便调查答案可以生成总体得分。

我的数据结构基本上是这样的:

[{
    "title": "Survey title",
    "active": true,
    "form": {
        "FocusQuestions": {
            "type": "fieldset",
            "title": "Focus area",
            "scoreWeight": 30,
            "fields": [{
                "AgeGroup": {
                    "type": "select",
                    "label": "What is the age group?",
                    "options": {
                        "1": "Infants (0 - 2yrs)",
                        "2": "Toddlers (2 - 4yrs)",
                        "3": "Children" (4 - 13yrs)"
                    },
                    "maxScore": 3
                }
            }
       }
   }
   "responses":[{
       "name": "John Doe",
       "answers":{
           "AgeGroup": 2
       }
   }]
}]

在我的代码中,我有一个负责加载调查定义等的SurveyController和一个负责与实际调查响应相关的任务的ResponseController。我很难弄清楚的是,将回应答案与调查中定义的得分权重相结合以生成分数的适当"角度方式"。因为有两个控制器需要共享数据,我怀疑我可能需要像ScoringService这样的东西来完成所有的计数,但我不知道它是如何工作的。如果您能给我提供任何帮助或指导,我将不胜感激。

多谢!

你在正确的道路上!使用"ScoringService"将是实现它的正确方法。

服务只是可以在不同的控制器之间共享的对象。创建服务的方法是在你的应用模块中使用"service"方法:

var app = angular.module('myApp', [])
app.service('serviceName', function(){
   this.tally = function(scores){  
     // Do some tallying and return result
   }
});

你可以从你的控制器通过注入到函数中来调用这个服务:

app.controller('myCtrl', function(serviceName){
   // now you can invoke the tally function within your controller by doing:
   serviceName.tally(scores)
});

相关内容

  • 没有找到相关文章

最新更新