gpt4 book ai didi

javascript - 在 Angular 中播放 FizzBu​​zz

转载 作者:行者123 更新时间:2023-11-30 00:22:00 26 4
gpt4 key购买 nike

我已经在 Angular 中成功实现了 FizzBu​​zz,并且想知道我是否根据 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;
})

最佳答案

angular.module('fizzbuzz', [])


.factory("Counter", function() {
var increment = function() {
service.number++;
if (service.number % 15 === 0) {
//any way to set $scope.display directly here?
service.display = "FIZZBUZZ"
}
else if (service.number % 3 === 0) {
service.display = "FIZZ"
}
else if (service.number % 5 === 0) {
service.display = "BUZZ"
}else{
service.display = service.number
}
}
var service = {
increment: increment,
number:0,
display: 'Click to start'
}
return service;
})

.controller("FizzBuzz", function($scope, Counter) {
// can reference method and data from the service
$scope.Counter = Counter;
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
Testing
<div ng-app="fizzbuzz" ng-controller="FizzBuzz">
<h1 ng-click="Counter.increment()"> {{ Counter.display }} {{ Counter.number }} </h1>
</div>

修改后包含一个 HTML 用法示例。还根据这里的解释修改了FIZZ BUZZ的逻辑: http://c2.com/cgi/wiki?FizzBuzzTest

关于javascript - 在 Angular 中播放 FizzBu​​zz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32771174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com