זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/html5-web-development/lessons/angular-intro
זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/html5-web-development/lessons/angular-intro
הפתרון שלי לתרגיל שהופיע בתחתית הדף:
<!DOCTYPE html>
<html lang="en" >
<head>
  <meta charset="UTF-8">
  <link rel="shortcut icon" type="image/x-icon" href="https://static.codepen.io/assets/favicon/favicon-8ea04875e70c4b0bb41da869e81236e54394d63638a1ef12fa558a4a835f1164.ico" />
  <link rel="mask-icon" type="" href="https://static.codepen.io/assets/favicon/logo-pin-f2d2b6d2c61838f7e76325261b7195c27224080bc099486ddd6dccb469b8e8e6.svg" color="#111" />
  <title>CodePen - Angular Clicks Counter</title>
  
</head>
<body translate="no" >
  <div ng-app="myApp">
  <div ng-controller="mainController as vm">
    <p>Clicks: 
      <span ng-bind="vm.clicks"></span>
    </p>
    <button ng-click="vm.click()">Click Me</button>
    <p ng-bind="vm.congrat()"></p>
  </div>
</div>
  
  <script src='https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.3/angular.min.js'></script>
  
    <script >
      angular.module('myApp', []);
angular.module('myApp').controller('mainController', MainController);
function MainController() {
  this.clicks = 0;
  this.click = function() {
    this.clicks++;
  };
  this.congrat = function() {
    return this.clicks >= 10 ? "Bravo!" : "";
  };
  
}
</script>
</body>
</html>
 
ועכשיו את אותו תוכנית רק בתחביר של JAVASCRIPT:
<!DOCTYPE html>
<html lang="en" >
<head>
  <meta charset="UTF-8">
  <link rel="shortcut icon" type="image/x-icon" href="https://static.codepen.io/assets/favicon/favicon-8ea04875e70c4b0bb41da869e81236e54394d63638a1ef12fa558a4a835f1164.ico" />
  <link rel="mask-icon" type="" href="https://static.codepen.io/assets/favicon/logo-pin-f2d2b6d2c61838f7e76325261b7195c27224080bc099486ddd6dccb469b8e8e6.svg" color="#111" />
  <title>CodePen - Angular Clicks Counter</title>
  
</head>
<body translate="no" >
  <div>
  <div>
    <p>Clicks: 
      <span class="showClicks"></span>
    </p>
    <button >Click Me</button>
    <p class="bravo"></p>
  </div>
</div>
    <script>
            let span = document.body.querySelector(".showClicks");
            let p = document.body.querySelector(".bravo");
            let button = document.body.querySelector('button');
            span.textContent=0;
            function click(){
                this.click=function (){
                this.clicks++;
                }
                this.click();
                span.textContent=this.clicks;
                if(this.clicks===10){
                    p.textContent=this.clicks >= 10 ? "Bravo!" : "";
                }
            }
            button.clicks=0;
            button.addEventListener("click",click);
  </script>
</body>
</html>
 
 
Blockquote
למה צריך להגדיר את המודל וגם את ה- VIEW(CONTROLER) , השאלה היא מבחינת מפתחי ה-FW , למה הם עשו את זה כך ?
ניסיתי להוסיף פונקציה נוספת ב- JS כך שתשנה את הערך חיצונית מאנגולר - ולראות אם המשתנה באנגלור מקבל את הערך החדש , וזה לא עבד
angular.module('myApp', []);
angular.module('myApp').controller('mainController', function() {});
var btn=document.getElementById("btnTest");
var p= document.querySelector("p");
btn.addEventListener('click',function(){p.value=100;});
כשחילקת את הקוד אנגולר לכמה קבצים - שמת את הפונקציות בתוך סוגריים.
- למה ?
- איך אנגולר יודע מה להריץ ראשון ? ומי בכלל קורא לפונקציות הללו ?
לגבי המשימה - זה הפתרון שלי
- 
למה אתה מתכוון כשאתה כותב ״מודל״? באנגולר יש משהו שנקרא Controller שלפעמים מכנים אותו גם ViewModel - זה הרכיב שמחזיק את המידע. חוץ ממנו יש עוד כל מיני סוגים של רכיבים עליהם אני מדבר בשיעורים הבאים. אין שם רכיב שנקרא Model. 
- 
מדויק - אנגולר מזהה רק את השינויים שקורים דרכו. יש אפשרות לספר לאנגולר שעשית שינויים מבחוץ ואני מדבר עליהן בשיעורים הבאים. 
- 
כתיבת קוד בתוך סוגריים היא פרקטיקה שנקראת Self Invoking Functions. אפשר לקרוא עליה בהרחבה כאן: 
 https://sarfraznawaz.wordpress.com/2012/01/26/javascript-self-invoking-functions/
- אני מתכוון למה צריך גם angular.module , וגם angular.module(‘myApp’).controller ?
 2.זאת בדיוק השאלה - הרי מדובר בקובץ JS רגיל אז איך הוא יכול להעלים את הפקודות שאני כותב - או שזה לא קובץ JS רגיל ורק האנגולר מריץ אותו ?
 3.אוקי הבנתי עכשיו שאפשר להריץ את הפונקציה בעצמה - אבל איך הוא יודע מה ירוץ ראשון ? אם הם בקבצים נפרדים?
- 
זה בשביל להשאיר את האופציה שיהיו כמה Applications שונים באותו דף (תזכור שלכל controller יש שם אז אולי יש פה חשש מהתנגשות בשמות שלהם) 
- 
בדיוק בגלל שזה קובץ JS רגיל- 
 אנגולר לא מעלים את הפקודות שאתה כותב אלא המצב הוא הפוך: זה אנגולר שמפעיל את הפקודות. כלומר כשאתה מתוך אנגולר מעדכן משתנה ב Controller אנגולר מזהה את השינוי ומפעיל פקודה שלו כדי לעדכן את ה DOM לערך החדש. אבל אם אתה עושה בדיוק את אותו דבר ״מחוץ״ לאנגולר אז לא יהיה מי שיפעיל את הפקודה לעדכון העמוד. ה Controller כן התעדכן פשוט העדכון שלו לא משפיע ויזואלית.
אני חושב שזה יהיה יותר ברור בשיעורים הבאים כשנלמד איך כותבים פקודות אנגולר כמו ng-bind. פקודות אלה נקראות Directives והן שיוצרות את הקשר בין ה DOM למשתנים על ה Controller
אני נכנסתי לאתר של ANGULAR ועובר אויתם צעד צעד של בניית קובץ לדוגמא מהאתר https://angular.io/guide/quickstart
מה שמוזר שאין בכלל בשום מקום את ההגדרה הזו של
angular.module('myApp', []);
angular.module('myApp').controller('mainController', function() {});
מה זה ה- @ כאשר מייצרים קוד דרך ה- angular cli
import { Component } from '@angular/core';
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'Tour of Heroes';
}
כמו כן כאשר אני עובד עם angular cli אני לא מצליח להגיע למשתנים של האנגולר דרך הconsol?
angular.element(document.querySelector('p')).scope().vm.clicks
אני מקבל שגיאה שלא מוגדר בכלל משתנה angular
נדמה לי שדיברנו על זה במקום אחר - שים לב שיש שתי גירסאות, אתר angular.io זה לגירסא החדשה. כל מה שמופיע פה בקורס זה לגירסא הישנה. אלה די שתי ספריות שונות לגמרי…
היי,
האם לומדים פה angular.JS ? או אנגולר רגיל?
הי מלכה בקורס זה לומדים Angular.JS הישן יותר. באופן כללי שימי לב שלקורס זה גירסה חדשה יותר (בלי אנגולר) כאן:
https://www.tocode.co.il/bundles/frontend/toc