質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

解決済

1回答

2231閲覧

AngularJS アドバイス

atc

総合スコア7

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

0クリップ

投稿2017/03/18 07:28

初心者です
JavaScriptのフレームワークのAngularJSを少しだけ勉強しました
勉強のため簡単に電卓のアプリでも作ろうと思ってなんとなく途中までコードを書いたのですが、サービスとか役割分担?あってるでしょうか
使い方とかこうした方が良いよとかアドバイスが欲しいです

###該当のソースコード
HTMLのコード(とりあえずbodyだけ)

<!-- テキスト -->
<p> <ons-input id="text" name="text" modifier="underbar" ng-value = "{{text}}" ng-model="text"></ons-input> </p> <!-- 4 * 4のボタンテーブル --> <table> <tr ng-repeat="col in btns"> <td ng-repeat="row in col"> <section> <ons-button modifier="large" ng-click="onclick(row)">{{row}}</ons-button> </section> </td> </tr> </table>

JavaScriptのコード
angular.module('myApp', ['onsen','ngStorage'] )

//ボタン .value('btnsValue', [ [7, 8, 9, '÷'], [4, 5, 6, '×'], [1, 2, 3, '-'], ['.',0,'=', '+'], ]) //計算とか サービス .service('calcService',function() { this.text = ''; this.num1; this.num2; this.plus = function() { } this.minus = function() { } this.multiplied = function() { } this.divided = function() { } }) //コントローラ .controller('MyController', ['$scope','btnsValue','calcService', function($scope,btnsValue,calcService) { $scope.btns = btnsValue; //クリック $scope.onclick = function(num) { //押したボタンが数字かどうか if(!isNaN(num)) { //演算子ボタンを押した } else { switch(num) { case '÷': $scope.text = calcService.plus(); break; case '×': $scope.text = calcService.minus(); break; case '-': $scope.text = calcService.multiplied(); break; case '+': $scope.text = calcService.divided(); break; } } } }]);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

全体的に綺麗にまとまっていると思いました。
何点か気付いた点を記載します。

好みの問題ですが、AngularJSで$scopeを使うことについては色々と議論があり、as記法というものを推奨するような流れもあります。
参考
as記法が気に入れば、これを用いることも検討されても良いかと思います。なお$scopeが悪いということではありません。

btnsValueはValueで定義されていますが、利用するのがMyControllerだけであればController内に記載してもよいかと思います。calcServiceも同様です。
他のControllerやServiceで利用することを前提とするのであれば今回のような役割分担で良いかと思います。

tableタグを用いておられますが、OnsenUIではテーブルを表現するためのons-row、ons-colというタグが提供されています。利用が可能であれば検討してみても良いかと思います。

以上です。

投稿2017/03/18 09:30

akabee

総合スコア1947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

atc

2017/03/18 10:37

回答ありがとうございます! as記法挑戦してみます また、いくつか質問なのですが、 ・前に調べた時、コントローラーはスコープのセットアップに徹して、ビジネスロジックはサービスとして切り出すべきっていうのを見たのですが今回みたいに1つのコントローラーならサービス特に必要ないのですか? ・自作ディレクティブとはどういう時に使えば良いのでしょうか
akabee

2017/03/19 08:58

>コントローラーはスコープのセットアップに徹して、ビジネスロジックはサービスとして切り出すべき どういう文脈で語られたのかちょっと分かりませんが、AngularJSの提供元でもあるGoogleはAngularJSのことをMVWフレームワークと言っていたように記憶しています。WはWhateverの略で、Model-Viewの他はなんでもアリってことです。いろいろな使い方をしてみて、自分に合う書き方を考えればよいのではないでしょうか。 私個人としては、Serviceは「他のControllerで共有する値や処理で利用する」というような使い分け方をしています。Controller間での値の受け渡しや共有が難しいためです。 そういう意味で言えばロジックは基本的にServiceで定義しておけば、Controllerでは依存性注入するだけで共有して使えますからビジネスロジックをServiceに記述するのというのは正しいとも言えそうです。ただし「このServiceを使うには同時にこのValueの依存性も必要」などということになってくると後での再利用が難しくなる可能性があります。今回のコードでも、calcServiceを使うにはbtnsValueの依存性が必要ですよね。btnsValueはcalcServiceのプロパティとしても良いのかもしれません。そのへんを良しとするか悪とするか、どのような書き方であれば自分が見やすいか、試行錯誤しながら固めていかれるのがよいのではと思います。 >自作ディレクティブとはどういう時に使えば良いのでしょうか ディレクティブはHTMLタグに対して様々な処理を付加する機能です。HTMLタグを作ってしまうこともできます。 必要がなければ使わなくても良いとは思うのですが、UI上でのイベント処理関連では役に立つことも多いです。例えば以下GitHubに「長押し」時の処理を実現するためのディレクティブが公開されています。必要なHTMLタグにon-long-pressという属性を与えれば、長押しの処理が実現できます。Controllerでも実現できなくはありませんが、どのHTMLタグに対して長押しの処理を実行するか実行しないかは例えばHTMLタグのidを判断して実行可否を決定するなどの処理が必要になるかもしれません。その点ディレクティブであれば必要なHTMLタグに対し自作の属性を付与すれば良いというだけになります。 https://gist.github.com/BobNisco/9885852 また確かOnsenUIv1もディレクティブで作られていたような気がします。デザインをCSSに死ぬほど書くよりもディレクティブでHTMLタグを作ってしまったほうがスマートといえるかもしれません。 なんにせよ、必要に迫られれば使うということで良いと思います。
atc

2017/03/19 10:40

分かりやすい解説ありがとうございます! 勉強になりました 自分なりに考えながらやりたいと思います
akabee

2017/03/19 12:13

頑張ってくださいね~
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問