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>    

 

posted @ 2016-05-15 21:15  地雷  阅读(283)  评论(0编辑  收藏  举报