首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与AngularJS一起使用的封装模式

与AngularJS一起使用的封装模式
EN

Stack Overflow用户
提问于 2013-10-14 23:17:53
回答 1查看 1.1K关注 0票数 1

我需要在Javascript中创建智能对象/函数,以便与我的AngularJS应用程序一起使用。我该用什么图案来做这个呢?我目前正在使用我研究过的通用JavaScript‘模块’模式,但我想知道是否应该用AngularJS方式来建模这些对象/函数(如下所示)。也许是“服务”?

我来自Java背景,这让我有点不习惯用助手方法调用对象'service.‘.’但是,我可能需要调整JavaScript/AngularJS的定义。

该应用程序是一个基本的评分系统。两个主要目标/职能如下:

LessonScoreCard

代码语言:javascript
复制
/* 
 * LessonScoreCard
 * 
 * Is a "module" that keeps track of the score a user has for a given lesson
 * and whether or not for a given question there are more correct answers 
 * that can be made.
 */

var lessonScoreCard = (function() {

    //Map of questions to scores
    var privateQuestionNumberToScoreMap = {};

    //API to be used by external clients
    var publicAPI = {

        //A public function utilizing privates
        setScore: function(questionNumber, score) {
            privateQuestionNumberToScoreMap[ questionNumber ] = score;
        },

        //Sum the total score
        getTotalScore: function( ){
            var totalScore = 0;
            for( var questionNumber in privateQuestionNumberToScoreMap ){
                totalScore += privateQuestionNumberToScoreMap[questionNumber];
            }
        }
    };

    return publicAPI;
})();

应答键

代码语言:javascript
复制
/* 
 * AnswerKey
 * 
 * Is a "module" that takes an answer key and performs functions
 * related to it.
 */

var answerKey = (function() {

    //Set of right answers
    var privateQuestionNumberToAnswerArrayMap;

    //API to be used by external clients
    var publicAPI = {
        setAnswerKey: function(answerKeyModel) {
            privateQuestionNumberToAnswerArrayMap = answerKeyModel;
        },
        // A public function utilizing privates
        isCorrect: function(question, answer) {
            var isCorrect = false;

            var answerArray = privateQuestionNumberToAnswerArrayMap[ question ];
            if (answerArray.indexOf(answer) !== -1) {
                isCorrect = true;
            }
            return isCorrect;
        },

        getAnswerCount: function( question ){
            var answerArray = privateQuestionNumberToAnswerArrayMap[ question ];
            return answerArray.length;
        }

    };

    return publicAPI;

})();

示例JSON答案密钥模型

代码语言:javascript
复制
    {
        1: [1, 3],
        2: [4]
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-14 23:59:23

aet是对的,但我会进一步扩大服务的作用。服务和指令是在角上构建应用程序时的两个主要构建块。

指令与视图紧密耦合。它们用于:

  1. 根据用户输入或操作更改某些数据
  2. 响应数据更改更新UI

服务与视图非常不耦合。它们是用来:

  1. 封装业务逻辑
  2. 在整个应用程序中存储更健壮的模型数据,特别是如果应用程序太大以至于有超过一个控制器,或者模型数据与持久性机制紧密耦合(例如,骨干模型)

因此,只要服务与视图无关,服务就可以做任何事情。我认为您应该将lessonScoreCard和answerKey模块编写为服务工厂,并将它们插入到任何需要访问其功能的指令中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19370796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档