zoukankan      html  css  js  c++  java
  • Angular基本使用02

    插值表达式

    双大括号{{}}中可以放多种表达式,先准备一些演示数据

    var app = angular.module('demo.main', []);
    app.controller('nameController', function ($scope) {
        $scope.num = 1;
        $scope.fn = function () {
        console.log('函数执行了');
        return 'run';
        };
        $scope.data = {
            num: 1,
            str: 'hello world',
            arr:[1,2,3,4,5]
        };
    });
    1. 取值:{{data.name}}
    2. 取函数:{{fn}}
    3. 取对象:{{data}}
    4. 运算表达式:{{num + 2}}
    5. 函数执行:{{fn()}}
    <div ng-controller="nameController">
    <div>
    取值表达式:{{data.num}}
    <br>
    取函数:{{fn}}
    <br>
    取对象:{{data}}
    </div>
    <div>
    运算表达式:{{num + 2}}
    </div>
    <div>
    函数执行:{{fn()}}
    </div>
    </div>

    控制器的作用域

    数据依附于控制器,控制器可相互嵌套。当发生嵌套时数据获取类似于JavaScript的作用域链,若本身存在该数据则使用本身的,若本身没有则逐级往上获取直至为空。

    <body ng-app="demo.main">
    <div ng-controller="outerController">
    <div ng-controller="innerController">
    访问本级作用域:{{num}} <br/>
    访问上一级作用域:{{name}}<br/>
    无内容:{{data}}
    </div>
    </div>
    <script>
    var app = angular.module('demo.main', []);
    app.controller('outerController', function ($scope) {
        $scope.num = 1;
        $scope.name = 'outer';
    });
    
    app.controller('innerController',function($scope){
        $scope.num = 2;
    })
    </script>

    $apply方法

    在Angular中,当使用Angular的方法修改数据时,页面上相应的数据会被更新。当使用其他方式修改时虽然数据改变了但是页面上的值并没有更新。此时需要调用$apply方法来提醒Angular来更新一次界面。

    var app = angular.module('demo.main', []);
    app.controller('outerController', function ($scope) {
        $scope.num = 0;
        setTimeout(function(){
            //使用非Angular提供的方式修改数据时界面上的数据并不会被更新
            $scope.num = 1;
            //调用apply方法通知Angular更新页面上的数据
            $scope.$apply();
        },1000);
    });

    数据监视

    使用$watch方法监视某个数据。该方法返回一个函数,调用返回的函数可以解除监听。

    var app = angular.module('demo.main', []);
    app.controller('outerController', function ($scope) {
        $scope.num = 0;
        //每隔一秒使用非Angular提供的方式修改一次数据
        //此时$watch无法监听到数据的改变,调用$apply通知$watch
        setInterval(function(){
            $scope.num ++;
            //不调用$apply时$watch无法监听到数据的改变
           $scope.$apply();
        },1000);
        var releaseFn = $scope.$watch('num', function (newValue, oldValue, scope) {
            console.log(newValue, oldValue);
        });
        // 3秒后释放自己注册的watcher
        setTimeout(releaseFn,3000);
    });    

    内部路由

    Angular利用锚链接不会刷新界面的特性,提供了$location使得能实现单页面路由的功能。调用$location.path()返回当前的锚链接地址。

    <body ng-app="demo.main">
    <div ng-controller="mainController">
    <a href="#/a">goto a</a>
    <!-- 需要注意的是"#b"和"#/b"一样 -->
    <!-- 此时没有"/",但是Angular会自动添加"/" -->
    <a href="#b">goto b</a>
    <a href="#/c">goto c</a>
    此时路由至:{{path}}
    </div>
    </body>
    <script>
    var app = angular.module("demo.main",[]);
    app.controller("mainController",function($scope,$location){
        //将$location挂在在$scope上
        $scope.location = $location;
        //监听location.path()方法的返回值
        $scope.$watch('location.path()', function (nValue, oValue, scope) {
            //更新path为新的锚链接地址
            $scope.path = nValue;
        })
    });
    </script>    
  • 相关阅读:
    js 原生ajax实现
    layer 查看图片
    c# 操作XML
    C# 扩展方法
    c# 依赖注入
    visual studio 快捷键
    HIS系统结算后,没有更新单据状态为“已结算”
    网络流四·最小路径覆盖 HihoCoder
    飞行员配对(二分图最大匹配) 51Nod
    开心的小Q 51Nod
  • 原文地址:https://www.cnblogs.com/LandMine/p/5496152.html
Copyright © 2011-2022 走看看