【发布时间】:2015-09-24 21:24:47
【问题描述】:
我已经成功地在 Angular 中实现了 FizzBuzz,并且想知道我是否按照 Angular 最佳实践做所有事情。我的问题: 1)有没有办法直接在工厂设置 $scope.display 而不是返回一些东西?所以我可以在那里做 $scope.display = "FIZZ" 而不是 "return FIZZ" 吗? 2) 我真的需要单独的 $scope.counter 和 $scope.display 变量吗?
代码:
angular.module('fizzbuzz', [])
.factory("Counter", function() {
var increment = function(number) {
if (number % 3 === 0 && number % 5 === 0) {
//any way to set $scope.display directly here?
return "FIZZBUZZ"
}
if (number % 3 === 0) {
return "FIZZ"
}
if (number % 5 === 0) {
return "BUZZ"
}
return number;
}
return {
increment: increment
}
})
.controller("FizzBuzz", function($scope, Counter) {
// is there any way to do this without a separate counter variable?
$scope.display = 0;
$scope.counter = 0;
$scope.increment = function() {
//increment the counter before going into the function, reacting to ng-click
$scope.counter++;
//call the factories function to actually display
$scope.display = Counter.increment($scope.counter);
}
})
//HTML:
<doctype! html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js"></script>
<script src="fizzbuzz.js"></script>
</head>
<body>
<div ng-app="fizzbuzz" ng-controller="FizzBuzz">
<h1 ng-click="increment()"> {{ display }} </h1>
</div>
</body>
</html>
更新:
采纳了 Shaun 的建议,但没有显示任何内容:
angular.module('fizzbuzz', [])
.factory("Counter", function() {
var service = {};
service.number = 0;
service.display = "";
service.increment = function() {
service.number++;
if (service.number % 3 === 0 && service.number % 5 === 0) {
//any way to set $scope.display directly here?
service.display = "FIZZBUZZ"
}
if (service.number % 3 === 0) {
service.display = "FIZZ"
}
if (service.number % 5 === 0) {
service.display = "BUZZ"
} else {
service.display = service.number;
}
}
return service;
})
.controller("FizzBuzz", function($scope, Counter) {
// can reference method and data from the service
$scope.increment = Counter.increment;
$scope.display = Counter.display;
})
【问题讨论】:
-
@NeilS 好点下次会在那里提交!
-
用可运行的 sn-p 更新了我的帖子,问题是当您复制那里的值时,您没有通过原始对象使用引用,因此对原始对象属性的更新不会更新这些副本
标签: javascript angularjs fizzbuzz