如何使用AngularJS/Firebase建模数据-何时使用控制器?
How to approach modeling data using AngularJS/Firebase - When do I use a controller?
我正在克隆ESPN的牛排现金学习AngularJS &;重火力点。原因是数据可以是实时的,只是因为我想了解它,并且认为它可能比使用Node/Mongo作为后端更容易开始。
对于那些不知道什么是"现金牛排"的人来说,基本上你要回答与当天举行的体育赛事有关的两种方式中的一种,然后根据你回答对/错的次数建立一个月的输赢记录。
当我一直在研究这个问题时,我想出了一个更具体的问题,如果这可能更容易回答:所以我有了"道具",或者说问题,每个问题都有几个"选择"。还需要有一个与问题相关的答案。我还想对这些问题做些评论。
举例:道具-谁会得到更多的分数?选项A:德里克-罗斯选择B——勒布朗·詹姆斯答案:德里克-罗斯评论-"啊,我还以为会是勒布朗呢"(这个用户最终也会得到一个输赢记录)
我有一个游戏控制器& &;服务。在游戏服务中,我有"var Game ={"和添加/删除游戏的方法。我也有"addQuestion"的方法,它可以工作。方法中的代码是"games.$child(gameId).$child('props').$add(prop);"
对于选项、答案和注释,我是否也要这样做?把它们都扔进游戏控制器?他们什么时候得到自己的控制器或服务?对于选项,我将使用类似"games.$child(gameId).$child('props').$child('options')"之类的内容,但这对我来说似乎效率低下。另外,我不知道如何获得propId,因为我在gameview.html页面上,在URL中有gameId。
/控制器/gameview.js
'use strict';
app.controller('GameViewCtrl', function($scope, $routeParams, Game) {
$scope.game = Game.find($routeParams.gameId);
$scope.addProp = function () {
Game.addProp($routeParams.gameId, $scope.prop);
$scope.prop = '';
};
$scope.deleteProp = function(prop, propId) {
Game.deleteProp($scope.game, prop, propId);
};
$scope.addOption = function () {
Game.addOption($routeParams.propId, $scope.option);
};
});
/服务/Game.js
'use strict';
app.factory('Game',
function ($firebase, FIREBASE_URL) {
var ref = new Firebase(FIREBASE_URL + 'games');
var games = $firebase(ref);
var Game = {
all: games,
create: function(game) {
return games.$add(game);
},
find: function(gameId) {
return games.$child(gameId);
},
delete: function(gameId) {
return games.$remove(gameId);
},
addProp: function(gameId, prop) {
prop.gameId = gameId;
games.$child(gameId).$child('props').$add(prop);
},
deleteProp: function(game, prop, propId) {
game.$child('props').$remove(propId);
},
addOption: function(propId, option) {
option.propId = propId;
games.$child(propId).$child('options').$add(option);
}
// addPropOption: function()
};
return Game;
});
/视图/showgame.html
<div>
<strong>{{ game.home }}</strong>
<span class="vs">vs</span>
<strong>{{ game.away }} </strong>
<div ng-repeat="(propId, prop) in game.props">
<span>{{ prop.text }}</span>
<button ng-click="deleteProp(game,propId)" type="button" class="btn btn-danger">Delete Prop</button>
</div><!--
<button type="button" class="btn btn-danger" ng-click="deleteGame(gameId)">Delete Game</button> -->
<div ng-rpeat="optionId, option) in prop.options">
<span>{{ option.text }}</span>
</div>
</div>
<form ng-submit="addProp()">
<textarea ng-model="prop.text" placeholder="Enter Prop Here" class="form-control"></textarea>
<input type="submit" value="Add Prop" class="btn btn-primary" />
</form>
<form ng-submit="addOption()">
<textarea ng-model="option.text" placeholder="Enter Prop Option Here" class="form-control"></textarea>
<input type="submit" value="Add Option" class="btn btn-primary" />
</form>
<a href="#/games">Back to Games</a>
对于它的价值,我是一个前端开发人员,但我没有使用过任何Javascript框架,直到几周前,当我通过www.thinkster.io(顺便说一句很棒的东西)上的几个教程。
根据Angular的控制器指南,你应该:
使用控制器:
- 设置$scope对象的初始状态。
- 为$scope对象添加行为。
NOT use controllers to:
- 操纵DOM -控制器应该只包含业务逻辑。将任何表示逻辑放入控制器都会显著影响其可测试性。Angular在大多数情况下都有数据绑定和指令来封装手动DOM操作。
- 格式输入-使用角形控件代替
- 过滤器输出-使用角过滤器代替。
- 在控制器之间共享代码或状态——使用angular服务代替。
- 管理其他组件的生命周期(例如创建服务实例)。
因此,对于任何复杂的应用程序,你上面讨论的大多数东西都属于服务/工厂。您的控制器应该只处理从这些服务获取数据并将其应用于$scope(并为DOM提供与服务交互的任何方便方法)。
- 共谋似乎使控制器失效
- Ember.js-自动使动作成为目标控制器
- AngularJS-我怎么知道何时解决了对父控制器的承诺
- 如何使AngularJS控制器依赖于通过ajax加载在rootScope上的值
- 如何使Angular JS控制器与指令一起工作
- 如何使$filter在angularjs中的所有控制器功能中可用
- 在第三个控制器中使用时RootScope不工作
- 使 AngularJS 控制器中的$location无效
- 是否可以使控制器返回模式窗口的数据?MVC5 ASP.NET
- 将ngAnimate添加到控制器会使应用程序不显示内容
- 服务如何知道注入它的控制器何时被破坏
- Angular 的控制器方法如何使$scope可用于我的函数参数
- 角度:如何使$scope属性与控制器功能保持同步
- 如何使角度指令仅在一个控制器中工作
- 如何使控制器中的函数访问一个参数'在指令中
- 如何在AngularJS中使控制器功能只执行一次
- 如何使控制器/视图特定的Javascript在Rails3.1生产环境中工作
- 在angularjs中何时使用指令、何时使用服务以及何时使用控制器
- 在$promise中使用$broadcast, mocha如何知道事件何时在控制器$scope中触发?
- 如何使用AngularJS/Firebase建模数据-何时使用控制器?