<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>技術ブログ &#124; 株式会社クラウディア &#187; AngularJS</title>
	<atom:link href="https://cloudear.jp/blog/?cat=34&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>https://cloudear.jp/blog</link>
	<description>クラウド専門の業務システム・社内ツール開発</description>
	<lastBuildDate>Fri, 12 Nov 2021 05:00:35 +0000</lastBuildDate>
	<language>ja</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0.1</generator>
	<item>
		<title>『AngularJS』のフィルター機能は使わないほうがいい？</title>
		<link>https://cloudear.jp/blog/?p=672</link>
		<comments>https://cloudear.jp/blog/?p=672#comments</comments>
		<pubDate>Sun, 15 Feb 2015 10:43:24 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[フレームワーク]]></category>
		<category><![CDATA[フロントエンド]]></category>
		<category><![CDATA[プログラム]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=672</guid>
		<description><![CDATA[みなさんこんにちは、masa です。前回に続いて AngularJS を取り上げます。いやー AngularJS は奥が深いです。使いこなそうとすればするほどその引き出しの多さに驚かされます。 さて、今日はそんな Ang [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんこんにちは、masa です。前回に続いて AngularJS を取り上げます。いやー AngularJS は奥が深いです。使いこなそうとすればするほどその引き出しの多さに驚かされます。<br />
<span id="more-672"></span>さて、今日はそんな AngularJS の<strong>フィルター機能</strong>について解説してみたいと思います。</p>
<p>旧来のようにサーバー側でデータを整形してから渡すのではなく、フロントエンド側でデータを受け取ってから整形する方法が AngularJS でいうフィルター機能です。</p>
<p>通常、シングルページアプリケーションを作る際、サーバーサイドの仕事はデータベースを操作してフロントに JSON 形式などでデータを渡すことがメインとなりますが、データの整形はどちらでやるのがいいのか？ということ。</p>
<p>結論から言ってしまうと</p>
<p>&nbsp;</p>
<p><span style="color: #ff99cc; font-size: 14pt;"><strong>配列に対するフィルターは AngularJS でやらないほうがいい</strong></span></p>
<p>&nbsp;</p>
<p>たしかにサーバーサイドは常に生データをフロントに渡すだけにして、HTML 側のタグでちょちょいと整形するのが楽なことは楽です。整形し直したいときにあとでビジネスロジックをいじらなくて済みますし。</p>
<p>しかし、例として以下のロジックを見てください。</p>
<pre class="lang:default decode:true">&lt;div ng-controller="hogeController"&gt;

  &lt;input type="text" ng-model="name"&gt;&lt;br/&gt;
  &lt;button ng-click="memberAdd(name)"&gt;追加します&lt;/button&gt;
  
  &lt;div ng-repeat="member in members"&gt;
    {{member | hogeFilter}}&lt;br/&gt;
  &lt;/div&gt;

&lt;/div&gt;</pre>
<p>ユーザーがテキストボックスに名前を入れて「追加します」ボタンを押すと、members に追加して表示します。そして members すべてに対して hogeFilter というカスタムフィルターを掛けています。</p>
<p>現在、members 配列の要素数が 50 だったとします。（つまりメンバーが50人いる）<br />
この状態で Michael （マイケル氏）をメンバーに追加しようとすると、</p>
<p>&nbsp;</p>
<p><span style="font-size: 14pt; color: #ff99cc;"><strong>１文字入力する度に50要素に対してフィルターが発動します</strong></span></p>
<p>&nbsp;</p>
<p>つまり、Michael 7文字すべてを入力した時点で 350 回フィルターが実行されることになります。これは AngularJS が1文字入力される度に、フィルター後のデータを監視しているためです。</p>
<p>これがもっと大きい配列になったりするとブラウザ側の処理がめちゃくちゃ重くなりますので、注意が必要です。もちろん、limitTo や orderBy のようなデータ表示数を絞ったり、ソートするようなものならいいかもしれませんが、普通は SQL でやってしまうと思います・・。</p>
<p>いかがでしたか？個人的にはフィルターはすべてサーバーサイドでやろうかなと思案しています。今後もちょいちょい AngularJS ネタを書いていきたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=672</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>『AngularJS』を今すぐコピペで体験！</title>
		<link>https://cloudear.jp/blog/?p=628</link>
		<comments>https://cloudear.jp/blog/?p=628#comments</comments>
		<pubDate>Sun, 08 Feb 2015 11:52:39 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[フレームワーク]]></category>
		<category><![CDATA[フロントエンド]]></category>
		<category><![CDATA[プログラム]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=628</guid>
		<description><![CDATA[みなさんこんにちは masa です。今日は CSS設計について書こうと思っていたのですが、前回のシングルページアプリケーションの記事がそこそこ人気だったようなので（？）、その流れで今人気の AngularJS を取り上げ [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんこんにちは masa です。今日は CSS設計について書こうと思っていたのですが、前回のシングルページアプリケーションの記事がそこそこ人気だったようなので（？）、その流れで今人気の <a href="https://angularjs.org/" target="_blank">AngularJS</a> を取り上げたいと思います。<br />
<span id="more-628"></span><br />
突然ですが、だまされたと思って以下のコードを test.html など適当なファイル名でデスクトップに保存し、GoogleChrome で開いてみてください↓</p>
<pre class="toolbar:1 toolbar-overlay:false show-plain-default:true lang:default decode:true ">&lt;!DOCTYPE html&gt;
&lt;html lang="ja"  ng-app="" &gt;
  &lt;head&gt;
    &lt;meta charset="utf-8"&gt;
    &lt;title&gt;AngularJS を体験してみよう！&lt;/title&gt;
    &lt;script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.1/angular.min.js"&gt;&lt;/script&gt;
    &lt;script&gt;
      function MainCtrl($scope) {
          $scope.foods = [
              { foodname: 'SUKIYAKI' },
              { foodname: 'SUSHI' },
              { foodname: 'YAKINIKU' },
              { foodname: 'HAMBURG' },
              { foodname: 'TEPPANYAKI' },
              { foodname: 'CURRY' },
              { foodname: 'OYSTER' },
              { foodname: 'BANANACAKE' },
              { foodname: 'APPLEPIE' },
          ];
      }
  &lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;h2&gt;AngularJS を体験してみよう！&lt;/h2&gt;
    &lt;div ng-controller="MainCtrl"&gt;
      &lt;input type="search" placeholder="リアルタイム検索" ng-model="search"&gt;
      &lt;ul ng-repeat="food in foods | filter:search"&gt;
        &lt;li&gt;{{food.foodname}}&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/02/ang1.png"><img class="alignnone size-full wp-image-662" style="border-color: #D4D9DE;" src="https://cloudear.jp/blog/wp-content/uploads/2015/02/ang1.png" alt="ang1" width="486" height="456" border="1" /></a></p>
<p>うまくリアルタイムに絞り込みされましたか？これがインクリメンタルサーチというやつです。素の JavaScript でこれを実装しようとすると結構大変ですが、AngularJS なら html のタグに ng-タグを書くだけで実装できます。</p>
<p>私が最近買った本に、AngularJS の特徴として以下の項目が書いてありました。</p>
<ol>
<li><strong>HTML ベースのテンプレート機能</strong></li>
<li><strong>豊富なディレクティブ （html に直接書いたタグのこと）</strong></li>
<li><strong>多彩な表現を実現するフィルター機能</strong></li>
<li><strong>双方向データバインディング</strong></li>
<li><strong>シングルページアプリケーションに最適なルーティング</strong></li>
<li><strong>Ajax 通信のサポート</strong></li>
<li><strong>セキュリティ対策</strong></li>
<li><strong>その他（DIコンテナ、厳格なスコープ、テストの重視、モバイル対応）</strong></li>
</ol>
<p>前回記事で書いた「シングルページアプリケーション（以下SPA）」を作るときに、この AngularJS は大いに力を発揮します。jQuery だけで SPA 制作をがんばっていると、規模が大きくなってきたときにソースコードが膨大＆散乱してメンテナンス性が悪くなってきますので、それでお悩みの人は乗り換えてもいいと思います。</p>
<p>逆に、SPA のようなデータ書き換えというより、アニメーションバリバリなサイトのために jQuery プラグインを多用している方は、乗り換えてもあまりウマミがないかもしれません (´ρ｀)</p>
<p>ちなみに AngularJS でも「jqLite」という jQuery の簡易版が使えますし、AngularJS ファイルの前に本家フル jQuery ファイルを読み込めば AngularJS と併用できます。<br />
<span style="font-size: 8pt;">※その際 jQuery2系は使えないので1系を使ってください</span></p>
<p>これからも何回か AngularJS について取り上げていく予定ですが、今日は上記「4. 双方向データバインディング」が一体どういう意味なのか、実践を交えて解説していきましょう。</p>
<p>&nbsp;</p>
<p><span class="hcss1">　<span style="color: #000000;"><strong><span style="font-size: 14pt;">AngularJS の双方向データバインディングを解説</span></strong></span></span></p>
<p>何やら難しそうに聞こえますが、まずは冒頭と同じように以下のソースコードを test2.html など適当なファイル名でデスクトップに保存し、GoogleChrome で開いてみてください↓</p>
<pre class="lang:default decode:true ">&lt;!DOCTYPE html&gt;
&lt;html lang="ja" ng-app&gt;
  &lt;head&gt;
    &lt;meta charset="utf-8"&gt;
    &lt;title&gt;AngularJS の双方向データバインディングを体験&lt;/title&gt;
    &lt;script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.1/angular.min.js"&gt;&lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
  	&lt;h2&gt;AngularJS の双方向データバインディングを体験&lt;/h2&gt;
    &lt;input type="text" placeholder="お名前を入れてください" ng-model="name"&gt;
    &lt;div&gt;こんにちは！ {{name}}さん&lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/02/ang2.png"><img class="alignnone size-full wp-image-663" style="border-color: #D4D9DE;" src="https://cloudear.jp/blog/wp-content/uploads/2015/02/ang2.png" alt="ang2" width="531" height="286" border="1" /></a></p>
<p>リアルタイムに名前が表示されましたか？</p>
<p>これが双方向データバインディングです。これも素の JavaScript でやろうとすると結構ソースコードが多くなりますが、ご覧の通りソースコードは非常に少ないですね。これは Angular が ユーザーからのデータ入力（= Model）と表示データ（= View）をヒモ付けて監視しているためです。</p>
<p>上の例ではフォームから一方向にしかデータ操作していませんが、プログラムで name を書き換えれば、画面上の名前もリアルタイムに書き換わります。一方通行ではなく、Model と View が常に同期することが「双方向データバインディング」です。</p>
<p>いかがでしたか？今日は「AngularJS に興味はあるけど、難しそう」という方向けに、すぐに試せる形で解説をしてみました。実際、AngularJS は重厚なフレームワークで学習コストが高いです。が！極めればフロントエンドの開発工数をグっと圧縮させることができると思います。また、次回以降 AngularJS の機能や使い方について解説していきたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=628</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
