AngularJS初探

Hello World

AngularJS 1.x 的网址为 https://angularjs.org/
页面上HelloWorld代码

<!doctype html>
<html ng-app>
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
  </head>
  <body>
    <div>
      <label>Name:</label>
      <input type="text" ng-model="yourName" placeholder="Enter a name here">
      <hr>
      <h1>Hello {{yourName}}!</h1>
    </div>
  </body>
</html>

使用CDN方式
通过百度CDN http://cdn.code.baidu.com/ 查找Angular的URL替代src的地址


使用npm install方式安装
新建项目文件夹,在文件夹下执行npm install angular --save
将上面的src引入的代码换成<script src="node_modules/angular/angular.js"></script>
输入框中输入文本,会同时在下面文本的{{yourName}}处显示

要执行,必须在容器前面加上ng-app,表示里面的代码由Angular来管理<html ng-app><div ng-app ng-init="user.name='world'">
ng-model建立了模型变量的双向绑定,表达式{{变量}}也建立了双向绑定

{{::user.name}}是单向绑定,后面数据修改,取出的值不同时修改

Angular 解放了传统 JavaScript 中频繁的 DOM 操作
Angular本地文档运行:hs -o -p 8888建立本地服务器

MVC

  • Model: ng-model 中定义的可以看作Model
  • View: 视图页面
  • Controller: 控制器的JS代码
    以用户登录为例
  • 模型
    • 我们数据库中所有用户的信息
    • 接受控制器传来的用户名和密码进行校验的业务逻辑并返回true/false
  • 控制器
    • 接受用户在界面上填写的用户名和密码
    • 将用户名和密码交给模型
  • 视图
    • 给用户呈现一个表单
    • 接受用户输入内容,并将其提交给控制器
    • 根据控制器返回的数据,响应用户页面

模块(Module)与控制器(Controller)

通过var app= angular.module('myApp',[]);注册模块,第一个参数是这个模块的名字,第二个参数是这个模块所依赖的模块。注意必须指定第二个参数,否则变成找到已经定义的模块。
在html中,<div ng-app="myApp" ng-controller="DemoController">说明这个div交由myApp这个module来管理,controller由自定义DemoController来管理。
app.controller('DemoCtrl');创建一个DemoCtrl控制器,也可以通过如下代码创建并进行初始化。

    app.controller('DemoController', function($scope) {
      // 当控制器执行时会自动执行的函数
      $scope.user = {};
      $scope.user.name = '张三';
      // $scope不仅仅可以往视图中暴露数据,还可以暴露行为
      $scope.show = function() {
        console.log($scope.user);
      };
    });

angular在执行控制器函数时,会根据参数的名字($scope)去自动的注入对象,由于压缩代码会改变参数名称,注册控制的标准方式就是通过第二个参数传递数组的方式(数组的成员最后一个就是原本的控制器函数,前面的成员都是需要注入的对象名称),如下所示($scope)注入到function的a中。

    module.controller('HelloController', ['$scope','$http', function(a,b) {
      console.log(a);
    }]);

通常建立对象存储数据

      $scope.user = {
        username: '',
        password: ''
      };

行为数据,$scope暴露数据给全局用,不需要在function中传入

      $scope.login = function() {
        // 因为数据的变化时双向的同步,所以界面上的值变化会同步到$scope.user上
        console.log($scope.user);
      };

angular 基本不用操作DOM,如果必要,可以使用angular提供的jqlite,然后用angular.element('body')操作
监视第一个值发生变化,回调第二个传入的函数。函数中传入两个参数,一般用(now, old)来表示当前和之前的值

      $scope.$watch('user.username', function(now, old) {
        // 当user.username发生变化时触发这个函数
        // console.log('now is ' + now);
        // console.log('old is ' + old);
        if (now) {
          if (now.length < 7) {
            $scope.message = '输入格式不合法';
          } else {
            $scope.message = '';
          }
        } else {
          $scope.message = '请输入用户名';
        }
      })

$scope 视图和控制器之间的桥梁
AngularJS Batarang插件,安装后,勾选Enable启用,然后点击Scopes,可以选择查看Scope里面的数据


表达式

<body ng-app ng-cloak>ng-cloak隐藏表达式原型得到结果后显示,但直接用效果不理想,相当于在style中添加了[ng-cloak] { display: none;}。由于页面加载速度很快,style中还没加载完,表达式就直接显示在页面上了。因此我们要自己手工添加。也可以用class实现<body ng-app class="ng-cloak">,在style中添加。或者将引入angular的代码放在head中也可以

  <style>
    /* ng-cloak指令就是在NG执行完毕过后自动移除 */
    [ng-cloak],
    .ng-cloak {
      display: none;
    }
  </style>

常用表达式

 {{ 100 + 100 }}            数字  
 {{ 'hello' + 'angular' }}  字符串
 {{ zhangsan.name }}        对象,必须在$scope中定义
 {{ students[10] }}         数组 
 {{ true ? 'true':'false' }} 三元表达式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容