<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Angularjs</id>
	<title>Angularjs - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Angularjs"/>
	<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Angularjs&amp;action=history"/>
	<updated>2026-05-26T03:47:00Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://training-course-material.com/index.php?title=Angularjs&amp;diff=89040&amp;oldid=prev</id>
		<title>Lsokolowski1: /* Angularjs */</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Angularjs&amp;diff=89040&amp;oldid=prev"/>
		<updated>2025-08-27T17:35:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Angularjs&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:35, 27 August 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l11&quot;&gt;Line 11:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 11:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Angularjs Training Materials&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Angularjs Training Materials&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;DEPRICATED Version - consider this one instead [[Angular_Fundamentals|Angular]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039;&lt;/ins&gt;DEPRICATED&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039; &lt;/ins&gt;Version - consider this one instead [[Angular_Fundamentals|Angular]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Can I use your material}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Can I use your material}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Lsokolowski1</name></author>
	</entry>
	<entry>
		<id>https://training-course-material.com/index.php?title=Angularjs&amp;diff=89039&amp;oldid=prev</id>
		<title>Lsokolowski1: /* Angularjs */</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Angularjs&amp;diff=89039&amp;oldid=prev"/>
		<updated>2025-08-27T17:35:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Angularjs&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:35, 27 August 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l10&quot;&gt;Line 10:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 10:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Angularjs ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Angularjs ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Angularjs Training Materials&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Angularjs Training Materials&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;DEPRICATED Version - consider this one instead [[Angular_Fundamentals]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;DEPRICATED Version - consider this one instead [[Angular_Fundamentals&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|Angular&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Can I use your material}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Can I use your material}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Lsokolowski1</name></author>
	</entry>
	<entry>
		<id>https://training-course-material.com/index.php?title=Angularjs&amp;diff=89038&amp;oldid=prev</id>
		<title>Lsokolowski1 at 17:34, 27 August 2025</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Angularjs&amp;diff=89038&amp;oldid=prev"/>
		<updated>2025-08-27T17:34:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:34, 27 August 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l10&quot;&gt;Line 10:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 10:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Angularjs ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Angularjs ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Angularjs Training Materials&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Angularjs Training Materials&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;DEPRICATED Version - consider this one instead [[Angular_Fundamentals]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Can I use your material}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Can I use your material}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Lsokolowski1</name></author>
	</entry>
	<entry>
		<id>https://training-course-material.com/index.php?title=Angularjs&amp;diff=89037&amp;oldid=prev</id>
		<title>Lsokolowski1 at 17:31, 27 August 2025</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Angularjs&amp;diff=89037&amp;oldid=prev"/>
		<updated>2025-08-27T17:31:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:31, 27 August 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l4&quot;&gt;Line 4:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 4:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;slideshow style=&quot;nobleprog&quot; headingmark=&quot;⌘&quot; incmark=&quot;…&quot; scaled=&quot;false&quot; font=&quot;Trebuchet MS&quot; &amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;title: Angularjs&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;title: Angularjs&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;author: Lukasz Sokolowski (NobleProg)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;author: Lukasz Sokolowski (NobleProg)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/slideshow&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Angularjs ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Angularjs ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Lsokolowski1</name></author>
	</entry>
	<entry>
		<id>https://training-course-material.com/index.php?title=Angularjs&amp;diff=79976&amp;oldid=prev</id>
		<title>Lsokolowski: /* Nodejs examples ⌘ */</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Angularjs&amp;diff=79976&amp;oldid=prev"/>
		<updated>2020-11-05T17:51:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Nodejs examples ⌘&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Angular]]&lt;br /&gt;
{{Cat| Angular}}&lt;br /&gt;
{{Cat| JavaScript}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobleprog&amp;quot; headingmark=&amp;quot;⌘&amp;quot; incmark=&amp;quot;…&amp;quot; scaled=&amp;quot;false&amp;quot; font=&amp;quot;Trebuchet MS&amp;quot; &amp;gt;&lt;br /&gt;
;title: Angularjs&lt;br /&gt;
;author: Lukasz Sokolowski (NobleProg)&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Angularjs ==&lt;br /&gt;
Angularjs Training Materials&lt;br /&gt;
&lt;br /&gt;
{{Can I use your material}}&lt;br /&gt;
&lt;br /&gt;
== What is Angular JS? ⌘==&lt;br /&gt;
&lt;br /&gt;
* HTML5, CSS and JavaScript&lt;br /&gt;
* JSON and Ajax&lt;br /&gt;
* Angular JS Applications&lt;br /&gt;
* Models&lt;br /&gt;
* Bindings&lt;br /&gt;
&lt;br /&gt;
===  Intro ⌘===&lt;br /&gt;
&lt;br /&gt;
* Started in 2009 by Miško Hevery, a Google employee&lt;br /&gt;
* First version 2012&lt;br /&gt;
* Officially supported by Google&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* AngularJS extends HTML with new attributes&lt;br /&gt;
* Great for Single Page Applications (SPAs)&lt;br /&gt;
* Based on simplified jQuery core&lt;br /&gt;
&lt;br /&gt;
=== Intro con&amp;#039;t ⌘===&lt;br /&gt;
&lt;br /&gt;
* JavaScript framework usually added to an HTML page with a &amp;lt;script&amp;gt; tag&lt;br /&gt;
* Extends HTML attributes with Directives&lt;br /&gt;
* Binds data to HTML with Expressions&lt;br /&gt;
* Based on &lt;br /&gt;
** Model View Controller (MVC) methodology&lt;br /&gt;
** Dependency Injection (DI)&lt;br /&gt;
&lt;br /&gt;
=== Main components ⌘===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Idea !! Explanation&lt;br /&gt;
|-&lt;br /&gt;
| Template || HTML with additional markup&lt;br /&gt;
|-&lt;br /&gt;
| Directives || extend HTML with custom attributes and elements&lt;br /&gt;
|-&lt;br /&gt;
| Model || the data shown to the user in the view and with which the user interacts&lt;br /&gt;
|-&lt;br /&gt;
| Scope || context for model accessible by controllers, directives and expressions&lt;br /&gt;
|-&lt;br /&gt;
| Expressions || access variables and functions from the scope&lt;br /&gt;
|-&lt;br /&gt;
| Compiler || parses the template and instantiates directives and expressions&lt;br /&gt;
|-&lt;br /&gt;
| Filter || formats the value of an expression for display to the user&lt;br /&gt;
|-&lt;br /&gt;
| View || what the user sees (the DOM)&lt;br /&gt;
|-&lt;br /&gt;
| Data Binding || sync data between the model and the view&lt;br /&gt;
|-&lt;br /&gt;
| Controller || the business logic behind views&lt;br /&gt;
|-&lt;br /&gt;
| Dependency Injection || Creates and wires objects and functions&lt;br /&gt;
|-&lt;br /&gt;
| Injector || dependency injection container&lt;br /&gt;
|-&lt;br /&gt;
| Module || a container for the different parts of an app including controllers, services, filters, directives which configures the Injector&lt;br /&gt;
|-&lt;br /&gt;
| Service || reusable business logic independent of views&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;small&amp;gt;https://docs.angularjs.org/guide/concepts&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Models ⌘===&lt;br /&gt;
&lt;br /&gt;
* Model binds the value of HTML controls (input, select, textarea) to application data&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ng-model&amp;#039;&amp;#039;&amp;#039; directive&lt;br /&gt;
* Two-Way Binding&lt;br /&gt;
** when we change the input field, property in angular will also be changed&lt;br /&gt;
** validate the input (type validation: number, e-mail, required)&lt;br /&gt;
** data status (invalid, dirty, touched, error)&lt;br /&gt;
** CSS classes, depending on form field status&lt;br /&gt;
*** ng-empty(-not-), ng-touched(-un), ng-valid(-in), ng-dirty, ng-pending, ng-pristine&lt;br /&gt;
&lt;br /&gt;
=== Bindings ⌘===&lt;br /&gt;
&lt;br /&gt;
* Synchronization between the model and the view&lt;br /&gt;
** both updated at all times, immediately and automatically&lt;br /&gt;
** model changes, view reflects it, and vice versa&lt;br /&gt;
* Model - collection of data available for the application&lt;br /&gt;
* View - html container for application&amp;#039;s display&lt;br /&gt;
** has access to model&lt;br /&gt;
** directive &amp;#039;&amp;#039;&amp;#039;ng-bind&amp;#039;&amp;#039;&amp;#039;, binds innerHTML to model property&lt;br /&gt;
* Displaying model data in the view&lt;br /&gt;
** expression {{ }}&lt;br /&gt;
** directive &amp;#039;&amp;#039;&amp;#039;ng-model&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Controller - steers(adjusts) view via model &lt;br /&gt;
** separated from view&lt;br /&gt;
&lt;br /&gt;
=== Model and Bindings example ⌘===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;script src=&amp;quot;http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Application, View, Directives, Expression --&amp;gt;&lt;br /&gt;
    &amp;lt;div ng-app=&amp;quot;appy&amp;quot; ng-controller=&amp;quot;steery&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Directive, Binding to View from Model with Controller--&amp;gt;&lt;br /&gt;
      Who are you? &amp;lt;input ng-model=&amp;quot;wayField&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Binding to View from Model via Expression --&amp;gt;&lt;br /&gt;
      &amp;lt;h1&amp;gt;{{ wayField }}&amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Binding to View from Model via Directive --&amp;gt;&lt;br /&gt;
      &amp;lt;p ng-bind=&amp;quot;bindMe&amp;quot;&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
      // Module&lt;br /&gt;
      var app = angular.module(&amp;#039;appy&amp;#039;, []);&lt;br /&gt;
      // Controller with Scope&lt;br /&gt;
      app.controller(&amp;#039;steery&amp;#039;, function($scope) {&lt;br /&gt;
        $scope.wayField = &amp;quot;Knock Knock&amp;quot;;&lt;br /&gt;
        $scope.bindMe = &amp;quot;This one will work.&amp;quot;;&lt;br /&gt;
      });&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p ng-bind=&amp;quot;bindMe&amp;quot;&amp;gt;Why this will not work?&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Angular way (analysing an above example) ⌘====&lt;br /&gt;
&lt;br /&gt;
* There are no classes or IDs in the HTML to identify where to attach event listeners&lt;br /&gt;
* When &amp;#039;steery&amp;#039; set the &amp;#039;wayField&amp;#039; to &amp;quot;Knock Knock&amp;quot; we didn’t have to&lt;br /&gt;
** register any event listeners &lt;br /&gt;
** or write any callbacks&lt;br /&gt;
* &amp;#039;steery&amp;#039; got the $scope object that it needed without having to create it&lt;br /&gt;
* We didn’t have to call the steery ’s constructor ourselves, or figure out when to call it&lt;br /&gt;
&lt;br /&gt;
==== Angular way con&amp;#039;t 1 ⌘====&lt;br /&gt;
&lt;br /&gt;
* Thanks to MVC our app is easier to extend, maintain, and test&lt;br /&gt;
* Data Binding is the ability to update, part of the DOM separately, rather than updating the whole page&lt;br /&gt;
** We merge template HTML strings with data&lt;br /&gt;
** Then insert the result where we want it in the DOM &lt;br /&gt;
*** by setting innerHtml on a placeholder element&lt;br /&gt;
** To insert fresher data into the UI, or change the data based on user input&lt;br /&gt;
*** we could just declare which parts of the UI map to which JavaScript properties&lt;br /&gt;
*** have them sync automatically to eliminate code when writing our view and model&lt;br /&gt;
**** most of the work in moving data from one to the other just happens automatically&lt;br /&gt;
&lt;br /&gt;
==== Angular way con&amp;#039;t 2 ⌘====&lt;br /&gt;
&lt;br /&gt;
* Dependency injection&lt;br /&gt;
** instead of creating dependencies, our classes just ask for what they need&lt;br /&gt;
** &amp;#039;The Law of Demeter&amp;#039; design pattern (the principle of least knowledge)&lt;br /&gt;
*** steery’s job is to set up the initial state for the model&lt;br /&gt;
*** it shouldn’t worry about anything else, like how $scope gets created, or where to find it&lt;br /&gt;
* Directives&lt;br /&gt;
** powerful DOM transformation engine that lets us extend HTML’s syntax&lt;br /&gt;
** help us define the view for our app&lt;br /&gt;
&lt;br /&gt;
== Expressions ⌘==&lt;br /&gt;
&lt;br /&gt;
* Bind data to HTML&lt;br /&gt;
** &amp;lt;pre&amp;gt;double braces: {{ expression }}&amp;lt;/pre&amp;gt;&lt;br /&gt;
** directive: &amp;#039;&amp;#039;&amp;#039;ng-bind&amp;#039;&amp;#039;&amp;#039;=&amp;quot;expression&amp;quot;&lt;br /&gt;
* Resolved and resulted precisely where written&lt;br /&gt;
* Similar to JavaScript expressions&lt;br /&gt;
** can contain literals, operators, and variables&lt;br /&gt;
** can be written inside HTML&lt;br /&gt;
** do not support conditionals, loops, and exceptions&lt;br /&gt;
** support filters&lt;br /&gt;
&lt;br /&gt;
=== Expressions con&amp;#039;t ⌘===&lt;br /&gt;
&lt;br /&gt;
* Simple expressions&lt;br /&gt;
* Values&lt;br /&gt;
* Objects&lt;br /&gt;
* Arrays&lt;br /&gt;
* Maps&lt;br /&gt;
&lt;br /&gt;
=== Expressions example ⌘===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- numbers --&amp;gt;&lt;br /&gt;
{{ 1200 + 400 }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- strings --&amp;gt;&lt;br /&gt;
{{ mainUrl + &amp;quot;/&amp;quot; + trainingCategory + &amp;quot;/&amp;quot; + trainingName }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- objects, with double braces only --&amp;gt;&lt;br /&gt;
&amp;lt;div ng-app=&amp;quot;&amp;quot; ng-init=&amp;quot;training={title:&amp;#039;UML&amp;#039;,duration:21}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;The training title is {{ training.title }}&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- arrays, also with ng-bind --&amp;gt;&lt;br /&gt;
&amp;lt;div ng-app=&amp;quot;&amp;quot; ng-init=&amp;quot;results=[9,7,5,2,8]&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;The second result is {{ results[1] }}&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;The fourth result is &amp;lt;span ng-bind=&amp;quot;results[3]&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Directives ⌘==&lt;br /&gt;
&lt;br /&gt;
* Extend HTML with new attributes&lt;br /&gt;
** extended HTML attributes with the prefix &amp;#039;&amp;#039;&amp;#039;ng-&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Lots of built-in directives with plenty of functionalities&lt;br /&gt;
** ng-app, ng-init, ng-model, ng-repeat, ng-blur, ng-click, etc&lt;br /&gt;
** &amp;lt;small&amp;gt;More examples http://www.w3schools.com/angular/angular_ref_directives.asp&amp;lt;/small&amp;gt;&lt;br /&gt;
* We can define our own directives&lt;br /&gt;
&lt;br /&gt;
=== Directives con&amp;#039;t ⌘===&lt;br /&gt;
&lt;br /&gt;
* Data typing&lt;br /&gt;
* Looping over arrays and arrays of objects &amp;#039;&amp;#039;&amp;#039;ng-repeat&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Creating tables, handling selects &amp;#039;&amp;#039;&amp;#039;ng-repeat&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;ng-options&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Enabling and disabling HTML elements &amp;#039;&amp;#039;&amp;#039;ng-readonly&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Hiding and showing HTML elements &amp;#039;&amp;#039;&amp;#039;ng-show&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;ng-hide&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Handling HTML events &lt;br /&gt;
** ng-blur, ng-change, ng-click, ng-copy, ng-cut, ng-dblclick&lt;br /&gt;
** ng-focus, ng-keydown, ng-keypress, ng-keyup&lt;br /&gt;
** ng-mousedown, ng-mouseenter, ng-mouseleave, ng-mousemove, ng-mouseover&lt;br /&gt;
** ng-mouseup, ng-paste&lt;br /&gt;
* Custom Directives&lt;br /&gt;
&lt;br /&gt;
=== Directives example ⌘===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- looping with arrays --&amp;gt;&lt;br /&gt;
&amp;lt;div ng-app=&amp;quot;&amp;quot; ng-init=&amp;quot;courses=[&amp;#039;UML&amp;#039;,&amp;#039;Drupal&amp;#039;,&amp;#039;MongoDB&amp;#039;]&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;My favourite courses:&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li ng-repeat=&amp;quot;c in courses&amp;quot;&amp;gt;&lt;br /&gt;
      {{ c }}&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- looping with objects --&amp;gt;&lt;br /&gt;
&amp;lt;div ng-app=&amp;quot;&amp;quot; ng-init=&amp;quot;courseEvents=[&lt;br /&gt;
{venue:&amp;#039;London&amp;#039;,country:&amp;#039;United Kingdom&amp;#039;},&lt;br /&gt;
{venue:&amp;#039;Warsaw&amp;#039;,country:&amp;#039;Poland&amp;#039;},&lt;br /&gt;
{venue:&amp;#039;HongKong&amp;#039;,country:&amp;#039;China&amp;#039;}]&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Course events:&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li ng-repeat=&amp;quot;ce in courseEvents&amp;quot;&amp;gt;&lt;br /&gt;
    {{ ce.venue + &amp;#039;, &amp;#039; + ce.country }}&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- own directive --&amp;gt;&lt;br /&gt;
&amp;lt;body ng-app=&amp;quot;myOwnDirective&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- as html tag --&amp;gt;&lt;br /&gt;
&amp;lt;my-beauty-something&amp;gt;&amp;lt;/my-beauty-something&amp;gt;&lt;br /&gt;
&amp;lt;!-- as html tag&amp;#039;s attribute --&amp;gt;&lt;br /&gt;
&amp;lt;div my-beauty-something&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var app = angular.module(&amp;quot;myOwnDirective&amp;quot;, []);&lt;br /&gt;
&lt;br /&gt;
app.directive(&amp;quot;myBeautySomething&amp;quot;, function() {&lt;br /&gt;
    return {&lt;br /&gt;
        restrict : &amp;quot;A&amp;quot;,&lt;br /&gt;
        template : &amp;quot;&amp;lt;h1&amp;gt;My beauty directive!&amp;lt;/h1&amp;gt;&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Controllers ⌘==&lt;br /&gt;
&lt;br /&gt;
* Control the data&lt;br /&gt;
* Regular JavaScript Objects&lt;br /&gt;
* Defined by &amp;#039;&amp;#039;&amp;#039;ng-controller&amp;#039;&amp;#039;&amp;#039; directive&lt;br /&gt;
* Created by a standard JavaScript object constructor&lt;br /&gt;
&lt;br /&gt;
=== Controllers con&amp;#039;t ⌘===&lt;br /&gt;
&lt;br /&gt;
* Defining controllers&lt;br /&gt;
* Object property functions&lt;br /&gt;
* Controller methods&lt;br /&gt;
* Controllers in external files&lt;br /&gt;
&lt;br /&gt;
=== Controllers example ⌘===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- html part --&amp;gt;&lt;br /&gt;
&amp;lt;div ng-app=&amp;quot;favCars&amp;quot; ng-controller=&amp;quot;carsCtrl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Color: &amp;lt;input type=&amp;quot;text&amp;quot; ng-model=&amp;quot;car.color&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Max Speed: &amp;lt;input type=&amp;quot;text&amp;quot; ng-model=&amp;quot;car.maxSpeed&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Full Name: {{fullDescr()}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;carsController.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// js part, content of file &amp;quot;carsController.js&amp;quot; &lt;br /&gt;
var app = angular.module(&amp;#039;favCars&amp;#039;, []);&lt;br /&gt;
app.controller(&amp;quot;carsCtrl&amp;quot;,function($scope) {&lt;br /&gt;
    $scope.car = {&lt;br /&gt;
        color: &amp;quot;black&amp;quot;,&lt;br /&gt;
        maxSpeed: &amp;quot;320km&amp;quot;,&lt;br /&gt;
    };&lt;br /&gt;
    $scope.fullDescr = function() {&lt;br /&gt;
        var c = $scope.car;&lt;br /&gt;
        return &amp;quot;This car is &amp;quot; + c.color + &amp;quot; and can drive at maximum speed of &amp;quot; + c.maxSpeed;&lt;br /&gt;
    };&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Namespaces ⌘==&lt;br /&gt;
&lt;br /&gt;
* Global namespace&lt;br /&gt;
* Modules&lt;br /&gt;
* Module dependencies&lt;br /&gt;
* Library loading&lt;br /&gt;
* Where to put scripts&lt;br /&gt;
* Application files&lt;br /&gt;
&lt;br /&gt;
=== Modules ⌘===&lt;br /&gt;
&lt;br /&gt;
To configure modules in angular we use this interface&lt;br /&gt;
* angular.Module&lt;br /&gt;
** type component&lt;br /&gt;
** https://docs.angularjs.org/api/ng/type/angular.Module&lt;br /&gt;
&lt;br /&gt;
=== Scopes ⌘===&lt;br /&gt;
&lt;br /&gt;
* angular object&lt;br /&gt;
* refers to the application model&lt;br /&gt;
* context in which expressions are executed(evaluated) &lt;br /&gt;
* arranged in hierarchical structure (like DOM of our app)&lt;br /&gt;
* can watch expressions and propagate events&lt;br /&gt;
&lt;br /&gt;
==== Scopes con&amp;#039;t ⌘====&lt;br /&gt;
&lt;br /&gt;
* when we change the model, we can observe it with API ($watch)&lt;br /&gt;
* to change the model not via angular usual ways(ctrls, services, etc), we can propagate it with API ($apply)&lt;br /&gt;
* nesting scopes&lt;br /&gt;
** child scopes - inheriting prototypically from parent scope&lt;br /&gt;
** isolate scopes&lt;br /&gt;
*** via property - scope: { ... }&lt;br /&gt;
*** https://docs.angularjs.org/guide/directive&lt;br /&gt;
&lt;br /&gt;
=== Dependency Injection ⌘===&lt;br /&gt;
&lt;br /&gt;
* design pattern&lt;br /&gt;
** how components get hold of their dependencies&lt;br /&gt;
* angular has it&amp;#039;s own injector subsystem&lt;br /&gt;
** creates components, &lt;br /&gt;
** resolves component&amp;#039;s dependencies&lt;br /&gt;
** provides them to other components as requested&lt;br /&gt;
&lt;br /&gt;
=== Dependency Injection con&amp;#039;t ⌘===&lt;br /&gt;
&lt;br /&gt;
* when we define components&lt;br /&gt;
* in module&amp;#039;s .run and .config blocks&lt;br /&gt;
** run - no &amp;#039;providers&amp;#039;&lt;br /&gt;
** config - no &amp;#039;service&amp;#039; and &amp;#039;value&amp;#039;&lt;br /&gt;
* services, directives, filters, and animations&lt;br /&gt;
** injectable factory method or constructor function&lt;br /&gt;
** can be injected with &amp;quot;service&amp;quot; and &amp;quot;value&amp;quot; components (as dependencies)&lt;br /&gt;
&lt;br /&gt;
=== di and just js ⌘===&lt;br /&gt;
&lt;br /&gt;
* DI is just a big list of key value pairs from which objects are pulled from and passed to our components. &lt;br /&gt;
* The way scopes work is based on prototypical inheritance.&lt;br /&gt;
* The $digest loop is just a task &lt;br /&gt;
** it iterates over expressions and watchers when Angular-related events occur&lt;br /&gt;
&lt;br /&gt;
== Filters ⌘==&lt;br /&gt;
&lt;br /&gt;
* Format and transform data&lt;br /&gt;
* Can be added to expressions by using the pipe character |, followed by a filter&lt;br /&gt;
** Convert to currency&lt;br /&gt;
** Array subsets&lt;br /&gt;
** Upper and lower case conversion&lt;br /&gt;
** Sorting&lt;br /&gt;
* Custom filter&lt;br /&gt;
** &amp;lt;small&amp;gt;http://www.w3schools.com/angular/tryit.asp?filename=try_ng_filters_custom&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Filters con&amp;#039;t ⌘===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;currency&amp;#039;&amp;#039;&amp;#039; number to a currency&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;date&amp;#039;&amp;#039;&amp;#039; date to a specified format&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;filter&amp;#039;&amp;#039;&amp;#039; select a subset of items from an array&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;json&amp;#039;&amp;#039;&amp;#039; an object to a JSON string&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;limitTo&amp;#039;&amp;#039;&amp;#039; limits an array/string, into a specified number of elements/characters&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;lowercase&amp;#039;&amp;#039;&amp;#039; a string to lower case&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;number&amp;#039;&amp;#039;&amp;#039; a number to a string&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;orderBy&amp;#039;&amp;#039;&amp;#039; orders an array by an expression&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;uppercase&amp;#039;&amp;#039;&amp;#039; a string to upper case&lt;br /&gt;
&lt;br /&gt;
=== Filters example ⌘===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div ng-app=&amp;quot;bestB&amp;quot; ng-controller=&amp;quot;booksCtrl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Best books ever:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li ng-repeat=&amp;quot;b in books | orderBy:&amp;#039;title&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
    {{ b.author + &amp;#039;, &amp;#039; + b.title }}&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
angular.module(&amp;#039;bestB&amp;#039;, []).controller(&amp;#039;booksCtrl&amp;#039;, function($scope) {&lt;br /&gt;
    $scope.books = [&lt;br /&gt;
        {author:&amp;#039;God&amp;#039;,title:&amp;#039;Bible&amp;#039;},&lt;br /&gt;
        {author:&amp;#039;Pratchett&amp;#039;,title:&amp;#039;Discworld&amp;#039;},&lt;br /&gt;
        {author:&amp;#039;Vujcic&amp;#039;,title:&amp;#039;Live without the limbs&amp;#039;},&lt;br /&gt;
        {author:&amp;#039;Silverberg&amp;#039;,title:&amp;#039;We come with dead people&amp;#039;},&lt;br /&gt;
        {author:&amp;#039;Lewis&amp;#039;,title:&amp;#039;Chronicles of Narnia&amp;#039;},&lt;br /&gt;
        ];&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTTP Requests ⌘==&lt;br /&gt;
&lt;br /&gt;
* Reading data from remote servers&lt;br /&gt;
** service $http &lt;br /&gt;
** makes a request to the server, and returns a response&lt;br /&gt;
&lt;br /&gt;
=== HTTP Requests con&amp;#039;t ⌘===&lt;br /&gt;
&lt;br /&gt;
* General requests&lt;br /&gt;
* Shortcuts&lt;br /&gt;
** .delete(), .get(), .head(), .jsonp(), .patch(), .post(), .put()&lt;br /&gt;
* Success and error handling&lt;br /&gt;
* Setting HTTP headers&lt;br /&gt;
* JSON and XSRF vulnerability protection&lt;br /&gt;
&lt;br /&gt;
=== HTTP Req Example ⌘===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div ng-app=&amp;quot;httpReq&amp;quot; ng-controller=&amp;quot;httpReqCtrl&amp;quot;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;{{content}}&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Different functions on success and failure.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var app = angular.module(&amp;#039;httpReq&amp;#039;, []);&lt;br /&gt;
&lt;br /&gt;
app.controller(&amp;#039;httpReqCtrl&amp;#039;, function($scope, $http) {&lt;br /&gt;
  $http.get(&amp;quot;badfilename.htm&amp;quot;)&lt;br /&gt;
  .then(function(response) {&lt;br /&gt;
      $scope.content = response.data;&lt;br /&gt;
  }, function(response) {&lt;br /&gt;
      $scope.content = &amp;quot;Oh, my .. You can&amp;#039;t see the result.. )-: &amp;quot;;&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Forms ⌘==&lt;br /&gt;
&lt;br /&gt;
* Data-binding and validation of input controls&lt;br /&gt;
* HTML input control&lt;br /&gt;
* Browser versus Angular JS validation&lt;br /&gt;
* Validating input values&lt;br /&gt;
* Displaying input error messages&lt;br /&gt;
&lt;br /&gt;
=== HTML input controls ⌘===&lt;br /&gt;
&lt;br /&gt;
* input elements&lt;br /&gt;
** checkbox, radiobuttons, selectbox&lt;br /&gt;
* select elements&lt;br /&gt;
* button elements&lt;br /&gt;
* textarea elements&lt;br /&gt;
&lt;br /&gt;
==== Form Examples ⌘====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- checkbox example --&amp;gt;&lt;br /&gt;
&amp;lt;form&amp;gt;&lt;br /&gt;
    Do you like it? :&lt;br /&gt;
    &amp;lt;input type=&amp;quot;checkbox&amp;quot; ng-model=&amp;quot;varYes&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;h1 ng-show=&amp;quot;varYes&amp;quot;&amp;gt;That&amp;#039;s great, it likes you too (-;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- radiobuttons example --&amp;gt;&lt;br /&gt;
&amp;lt;form&amp;gt;&lt;br /&gt;
  Do you like it?:&lt;br /&gt;
  &amp;lt;input type=&amp;quot;radio&amp;quot; ng-model=&amp;quot;varYes&amp;quot; value=&amp;quot;y&amp;quot;&amp;gt;Yes&lt;br /&gt;
  &amp;lt;input type=&amp;quot;radio&amp;quot; ng-model=&amp;quot;varYes&amp;quot; value=&amp;quot;n&amp;quot;&amp;gt;No&lt;br /&gt;
  &amp;lt;input type=&amp;quot;radio&amp;quot; ng-model=&amp;quot;varYes&amp;quot; value=&amp;quot;d&amp;quot;&amp;gt;Not sure&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- selectbox example --&amp;gt;&lt;br /&gt;
&amp;lt;form&amp;gt;&lt;br /&gt;
  Do you like it?:&lt;br /&gt;
  &amp;lt;select ng-model=&amp;quot;varYes&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;option value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;option value=&amp;quot;y&amp;quot;&amp;gt;Yes&lt;br /&gt;
    &amp;lt;option value=&amp;quot;n&amp;quot;&amp;gt;No&lt;br /&gt;
    &amp;lt;option value=&amp;quot;d&amp;quot;&amp;gt;Don&amp;#039;t know&lt;br /&gt;
  &amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- switch for radiobuttons and selectbox examples --&amp;gt;&lt;br /&gt;
&amp;lt;div ng-switch=&amp;quot;varYes&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div ng-switch-when=&amp;quot;y&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;p&amp;gt;Oh, great!&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div ng-switch-when=&amp;quot;n&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;p&amp;gt;What a shame..&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div ng-switch-when=&amp;quot;d&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;p&amp;gt;You sure be more sure (-:&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Browser versus Angular JS validation ⌘===&lt;br /&gt;
&lt;br /&gt;
* client-side form validation&lt;br /&gt;
* monitors the state of the form and input fields (input, textarea, select)&lt;br /&gt;
* lets to notify the user about the current state&lt;br /&gt;
* holds information about whether they have been touched, or modified, or not&lt;br /&gt;
* standard HTML5 attributes can also be used to validate input&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;novalidate&amp;#039;&amp;#039;&amp;#039; html5 attribute disables any default browser validation&lt;br /&gt;
* own validation function&lt;br /&gt;
** &amp;lt;small&amp;gt;http://www.w3schools.com/angular/tryit.asp?filename=try_ng_validate_custom&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Validation Example ⌘====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form ng-app=&amp;quot;validApp&amp;quot; ng-controller=&amp;quot;validCtrl&amp;quot; name=&amp;quot;valForm&amp;quot; novalidate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p&amp;gt;Hero name:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;heroInp&amp;quot; ng-model=&amp;quot;hero&amp;quot; required&amp;gt;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color:pink&amp;quot; ng-show=&amp;quot;valForm.heroInp.$dirty &amp;amp;&amp;amp; valForm.heroInp.$invalid&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;span ng-show=&amp;quot;valForm.heroInp.$error.required&amp;quot;&amp;gt;Hero name is humongously needed!&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p&amp;gt;Hero Email:&amp;lt;br&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;email&amp;quot; name=&amp;quot;email&amp;quot; ng-model=&amp;quot;email&amp;quot; required&amp;gt;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color:red&amp;quot; ng-show=&amp;quot;valForm.email.$dirty &amp;amp;&amp;amp; valForm.email.$invalid&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;span ng-show=&amp;quot;valForm.email.$error.required&amp;quot;&amp;gt;Hey, give me the Email, Mate!&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span ng-show=&amp;quot;valForm.email.$error.email&amp;quot;&amp;gt;Oups! Don&amp;#039;t cheat!&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; ng-disabled=&amp;quot;valForm.heroInp.$dirty &amp;amp;&amp;amp; valForm.heroInp.$invalid || valForm.email.$dirty &amp;amp;&amp;amp; valForm.email.$invalid&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var app = angular.module(&amp;#039;validApp&amp;#039;, []);&lt;br /&gt;
&lt;br /&gt;
app.controller(&amp;#039;validCtrl&amp;#039;, function($scope) {&lt;br /&gt;
    $scope.hero = &amp;#039;Captain Carrot&amp;#039;;&lt;br /&gt;
    $scope.email = &amp;#039;captain.carrot@gmail.com&amp;#039;;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Angular Modules ⌘==&lt;br /&gt;
&lt;br /&gt;
* Services&lt;br /&gt;
* Animation&lt;br /&gt;
* REST&lt;br /&gt;
* Cookies&lt;br /&gt;
* Mobile device support&lt;br /&gt;
&lt;br /&gt;
=== Services ⌘===&lt;br /&gt;
&lt;br /&gt;
* Function, or object, that is available for, and limited to, our AngularJS app&lt;br /&gt;
* Many built-in services&lt;br /&gt;
** $location, $http&lt;br /&gt;
* To use additional service in the controller, it must be defined as a dependency&lt;br /&gt;
** is passed in to the controller as an argument&lt;br /&gt;
* We still can use DOM objects like &amp;#039;window.location&amp;#039;&lt;br /&gt;
** but it would have some limitations for our AngularJS app&lt;br /&gt;
** angular &amp;#039;prefers&amp;#039; that we use it&amp;#039;s own services&lt;br /&gt;
* Our own service&lt;br /&gt;
** &amp;lt;small&amp;gt;http://www.w3schools.com/angular/tryit.asp?filename=try_ng_services_filter2&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Service Example ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div ng-app=&amp;quot;myApp&amp;quot; ng-controller=&amp;quot;myCtrl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;The url of this page is:&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;h3&amp;gt;{{myUrl}}&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var app = angular.module(&amp;#039;myApp&amp;#039;, []);&lt;br /&gt;
&lt;br /&gt;
app.controller(&amp;#039;myCtrl&amp;#039;, function($scope, $location) {&lt;br /&gt;
    $scope.myUrl = $location.absUrl();&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Animations ⌘===&lt;br /&gt;
&lt;br /&gt;
* Animated transitions, with help from CSS (add and remove classes)&lt;br /&gt;
* Transformation of an HTML element gives us an illusion of motion&lt;br /&gt;
* Additional angular Animate library &lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;var app = angular.module(&amp;#039;myApp&amp;#039;, [&amp;#039;ngAnimate&amp;#039;]);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Animation Example ⌘====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
div {&lt;br /&gt;
  transition: all linear 0.5s;&lt;br /&gt;
  background-color: lightblue;&lt;br /&gt;
  height: 100px;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.ng-hide {&lt;br /&gt;
  height: 0;&lt;br /&gt;
  width: 0;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
  top:-200px;&lt;br /&gt;
  left: 200px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-animate.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body ng-app=&amp;quot;anim&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Make the magic: &amp;lt;input type=&amp;quot;checkbox&amp;quot; ng-model=&amp;quot;animCh&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div ng-hide=&amp;quot;animCh&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Single Page Application Concept ⌘==&lt;br /&gt;
&lt;br /&gt;
* Routing in Single Page Application (SPA)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ngRoute&amp;#039;&amp;#039;&amp;#039; module&lt;br /&gt;
* Examples of simple SPAs&lt;br /&gt;
** TODOs list&lt;br /&gt;
*** &amp;lt;small&amp;gt;http://www.w3schools.com/angular/tryit.asp?filename=try_ng_todo_app&amp;lt;/small&amp;gt;&lt;br /&gt;
** PhoneCat example&lt;br /&gt;
*** &amp;lt;small&amp;gt;https://docs.angularjs.org/tutorial&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Router Example ⌘===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-route.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body ng-app=&amp;quot;routeApp&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#/&amp;quot;&amp;gt;Main(iac)&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;#aboutus&amp;quot;&amp;gt;AboutUs&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;#contact&amp;quot;&amp;gt;Contact&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- new Directive from ngRoute library --&amp;gt;&lt;br /&gt;
&amp;lt;div ng-view&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
var app = angular.module(&amp;quot;routeApp&amp;quot;, [&amp;quot;ngRoute&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
app.config(function($routeProvider) {&lt;br /&gt;
    $routeProvider&lt;br /&gt;
    .when(&amp;quot;/aboutus&amp;quot;, {&lt;br /&gt;
        template : &amp;quot;&amp;lt;h1&amp;gt;We&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;We are the best!&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
    .when(&amp;quot;/contact&amp;quot;, {&lt;br /&gt;
        template : &amp;quot;&amp;lt;h1&amp;gt;Contact&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;Forget about my mail and phone number!!&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
    .otherwise({&lt;br /&gt;
        template : &amp;quot;&amp;lt;h1&amp;gt;Nope&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;Why didn&amp;#039;t you try to click on something?&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging and IDEs ⌘==&lt;br /&gt;
&lt;br /&gt;
* batarang (chrome only)&lt;br /&gt;
* ng-inspector (more browsers)&lt;br /&gt;
** http://ng-inspector.org/&lt;br /&gt;
* console&lt;br /&gt;
** angular.reloadWithDebugInfo();&lt;br /&gt;
** angular.element($0)&lt;br /&gt;
*** angular.element($0).scope()&lt;br /&gt;
*** angular.element($0).scope().$parent&lt;br /&gt;
** $scope&lt;br /&gt;
* webstorm, sublime, visual studio, atom&lt;br /&gt;
&lt;br /&gt;
== Exercises ⌘==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0. Sum up:&lt;br /&gt;
&lt;br /&gt;
In Angular:&lt;br /&gt;
&lt;br /&gt;
(This also references script order for loading)&lt;br /&gt;
&lt;br /&gt;
Module wraps everything in the App.&lt;br /&gt;
Controller talks to the View via Model.&lt;br /&gt;
Model handles scope (is scope).&lt;br /&gt;
Filter sorts the data.&lt;br /&gt;
Service sets up for example REST server, or just pure http.&lt;br /&gt;
Directive extends html with new Attribute(also tag, css class, comment).&lt;br /&gt;
Route serves paths.&lt;br /&gt;
Expression binds data between input(user) and the database.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Exercise:&lt;br /&gt;
&lt;br /&gt;
Case: How to use value from $rootScope inside our controller?&lt;br /&gt;
&lt;br /&gt;
Do it in two ways (-:&lt;br /&gt;
&lt;br /&gt;
HINT:&lt;br /&gt;
- Try to rewrite this example: &lt;br /&gt;
http://www.w3schools.com/angular/tryit.asp?filename=try_ng_scope_rootscope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Exercise:&lt;br /&gt;
Create small website locally. &lt;br /&gt;
2.1. It should show ordered html list of elements (let&amp;#039;s say your 3 favourite movies)&lt;br /&gt;
2.2. Use angular and create in the Module application for this &amp;quot;ol&amp;quot;&lt;br /&gt;
2.3. Angular should handle gathering data for the all &amp;quot;li&amp;quot; elements in the loop (use proper Directive)&lt;br /&gt;
2.4. Angular should use Controller to manage variables&lt;br /&gt;
2.5. Use angular to Filter the movies and provide descending order of them&lt;br /&gt;
2.6. Make View, which will keep &amp;quot;ol&amp;quot; separated and will be injected in main view(html document)&lt;br /&gt;
&lt;br /&gt;
PLAN:&lt;br /&gt;
Create HTML views &lt;br /&gt;
	- Create a module that contains the main view (DATA)&lt;br /&gt;
		- Write the controller that helps talk &lt;br /&gt;
                  to the rest of the application&lt;br /&gt;
&lt;br /&gt;
		- Write the Model that contains the $Scope &lt;br /&gt;
		  that  delineates the values (movies)&lt;br /&gt;
		&lt;br /&gt;
		- Establish the filter and what fields it will&lt;br /&gt;
                  filter based on the data - Include an&lt;br /&gt;
                  expression to populate the data to the &lt;br /&gt;
		  front end (from the scope)&lt;br /&gt;
&lt;br /&gt;
		- Cut the &amp;quot;ol&amp;quot; from the main view, put it in the angular view and include it via Directive &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.7. Use inline edit in moviexerc. &lt;br /&gt;
&lt;br /&gt;
Copy the whole project and create new application, it should keep two modules:&lt;br /&gt;
- one for list of movies, &lt;br /&gt;
- second for inline-edit&amp;#039;able title &amp;#039;List of my fav movies&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hint:&lt;br /&gt;
Try to use this library:&lt;br /&gt;
http://vitalets.github.io/angular-xeditable/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.7.1. Make your app bowerized (-: &lt;br /&gt;
&lt;br /&gt;
2.7.2. Implement this library in the simplest possible way:&lt;br /&gt;
http://www.cssscript.com/demo/beautiful-native-javascript-alert-replacement-sweet-alert/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Exercise:&lt;br /&gt;
&lt;br /&gt;
Another website should show some data about potential customer.&lt;br /&gt;
&lt;br /&gt;
It should:&lt;br /&gt;
- use controller to provide default data: customer&amp;#039;s name &amp;#039;Naomi&amp;#039;,&lt;br /&gt;
cutomer&amp;#039;s address &amp;#039;1600 Amphitheatre&amp;#039;&lt;br /&gt;
- have implemented your own custom angular &amp;#039;Directive&amp;#039;&lt;br /&gt;
and bind/invoke it in all possible ways: attribute, tag, class, comment&lt;br /&gt;
-- this directive should be restricted only to tag and attribute&lt;br /&gt;
-- test it, try to invoke also as class and comment&lt;br /&gt;
- have structure of folders: js, partials(same meaning as views)&lt;br /&gt;
- use &amp;#039;partial html template&amp;#039;(view) with angular &amp;#039;Expressions&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Exercise:&lt;br /&gt;
&lt;br /&gt;
Case: To simplify training coordinator&amp;#039;s work &lt;br /&gt;
(compare to example in apache/mysql/php/jquery/drupal shown by trainer)&lt;br /&gt;
&lt;br /&gt;
4.1. Validate polish PESEL field (value example 82010901858):&lt;br /&gt;
- PESEL field should be required&lt;br /&gt;
- Make sure PESEL is correct (one angular module/controller should be responsible)&lt;br /&gt;
HINT: google PESEL algorythm&lt;br /&gt;
4.2. Prepopulate dynamically Date of birth field from PESEL field&lt;br /&gt;
- get date of birth from it &lt;br /&gt;
(include also algorythm for century 2000-2100, value example 15252305986)&lt;br /&gt;
- bind it into Date of birth input field (with this format &amp;#039;1982-01-09&amp;#039;), &lt;br /&gt;
do it dynamically when user type PESEL in first input field&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Exercise:&lt;br /&gt;
&lt;br /&gt;
Case: Write your own custom filter that title-cased strings for your headings in main html template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. Exercise:&lt;br /&gt;
&lt;br /&gt;
Write your custom service, which will find the person with the longest first name &lt;br /&gt;
and longest last name from the list of users.&lt;br /&gt;
&lt;br /&gt;
Use this service in a filter connected to select list field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Exercise:&lt;br /&gt;
&lt;br /&gt;
Case: Write your own custom TODO list.&lt;br /&gt;
&lt;br /&gt;
HINT:&lt;br /&gt;
Try to use:&lt;br /&gt;
- methods like &amp;#039;.push&amp;#039;, &amp;#039;.forEach&amp;#039;&lt;br /&gt;
- store data in model (scope)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8. Exercise:&lt;br /&gt;
&lt;br /&gt;
Install another usefull start-up server example: angular seed project.&lt;br /&gt;
&lt;br /&gt;
8.1. git clone --depth=1 https://github.com/angular/angular-seed.git ang_seed&lt;br /&gt;
8.2. In &amp;#039;README.md&amp;#039; find a way to start the server.&lt;br /&gt;
8.3. Play with deafult example there (index.html)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. Exercise:&lt;br /&gt;
&lt;br /&gt;
Case: Create simple &amp;#039;Mail&amp;#039; app.&lt;br /&gt;
&lt;br /&gt;
9.0. Make it on top of your &amp;#039;ang_seed&amp;#039; server from the last exercise (no 8)&lt;br /&gt;
9.1. It should keep one main view(index.html), second for list of emails(list.html), third for one email(detail.html).&lt;br /&gt;
9.2. Controller:&lt;br /&gt;
- should keep some fake mails (array of objects: id, sender, subject, date, message) in jsoned variable&lt;br /&gt;
- and have simple mapping between URLs, templates and controllers&lt;br /&gt;
9.3. Create REST API and &amp;#039;end-point&amp;#039; in it with jsoned list of emails&lt;br /&gt;
- keep list of all mails as &amp;#039;mails.json&amp;#039; file&lt;br /&gt;
- every single mail should have it&amp;#039;s own &amp;#039;.json&amp;#039; file&lt;br /&gt;
*9.4. Prepare &amp;#039;add mail&amp;#039; functionality&lt;br /&gt;
&lt;br /&gt;
HINTS: &lt;br /&gt;
Use:&lt;br /&gt;
- &amp;#039;html Table&amp;#039; in &amp;#039;angular way&amp;#039;, &lt;br /&gt;
- routes($routeProvider)&lt;br /&gt;
- learn from default example in &amp;#039;ang_seed&amp;#039;&lt;br /&gt;
- for date format use for example this &amp;#039;Dec 6, 2013 20:35:02&amp;#039;  &lt;br /&gt;
- Use pure &amp;#039;$http&amp;#039; service and later improve it with &amp;#039;angular-resource&amp;#039; library and cerate services with &amp;#039;.factory&amp;#039; &lt;br /&gt;
- make sure your &amp;#039;*.json&amp;#039; files are formed correctly&lt;br /&gt;
- if you want to start the http server manually:&lt;br /&gt;
-- node node_modules/http-server/bin/http-server -a localhost -p 8000 -c-1 ./app&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. Exercise:&lt;br /&gt;
&lt;br /&gt;
Case: AJAX requests via $http service&lt;br /&gt;
&lt;br /&gt;
Create small app which will get list of emails from the previous exercise.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11. Exercise:&lt;br /&gt;
&lt;br /&gt;
Case: Fix it!&lt;br /&gt;
&lt;br /&gt;
Fix to-do list app in folder &amp;#039;newtodo00&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lsokolowski</name></author>
	</entry>
</feed>