程序员

AngularJs关于页面更新

2018-07-14  本文已影响0人  全村的希望iOS

简介

        使用Angular或者Vue的都知道,这两种语言都是操作数据从而促使页面自动更新,但是有的时候即使数据改变了页面也不会更新,这一节我们探讨什么时候数据更新了但是页面却没更新。        

第一组组代码

        <html ng-app="myApp">

                <body ng-controller="myController">

                        {{name}}

                        <button ng-click="change">改变值</button>

                </body>

                <script>

                        var app = angular.module("myApp", []);

                        app.controller("myController",["$scope",function($scope){

                                //我们在页面输出vue

                                $scope.name = "AnguarJs";

                                $scope.age = 24;

                                $scope.change = function() {

                                            $scope.age = 25;

                                            //页面没有用{{}}显示age,这个时候我们点击按钮页面的值由AngularJs变成了new Angular

                                };

                                //我们做个定时器来改变页面的name值

                                setTimeout(function() {

                                            $scope.name = "new Angular";

                                            console.log($scope.name );//输出改变后的值,没问题,但是页面没有更新,为什么呢?往后看,我们加个按钮,点击改变一个跟name不相关的值我们定义为age

                                },1000)

                        }]);

                </script>

        </html>

总结:有这个例子我们可以总结出,非ng-指令的方法不能使Angular的页面更新,由此我们也得出一个结论ajax请求成数据赋值,不会更新页面。

第二组代码

        <html ng-app="myApp">

            <body ng-controller="myController">

                    {{name}}

            </body>

            <script>

                    var app = angular.module("myApp", []);

                    app.controller("myController",["$scope",function($scope){

                            $scope.name = "AngularJs";

                            setTimeout(function() {

                                    $scope.name = "new Angular";

                                    //手动更新

                                    $scope.apply();//当我们加上这句代码,发现页面更新了,但是这样写会更新$scope里面的所有数据。

                                    $scope.apply(function() {//如此一来我们只更新了name

                                        $scope.name = "new Angular";

                                    });

                            },1000);

                    }])

            </script>

       </html>

总结:$scope.apply();可以在ajax请求数据之后更新页面。

属性监听器

        属性监听器是用来监听值的变化,从而可以执行相应的操作

        $scope.$watch(function(newVal,oldVal) {

                //newVal新值  oldVal旧值

        })

内置定时器

            $interval(function() {

                    $scope.age += 1;

            },1000)

            $timeout(function() {

                    $scope.name = "new val"

            },1000);

注意:使用前请先在控制器内注入,并且两种方式都会更新页面。

总结:ng-指令可以出发页面的更新,ajax请求成功数据直接赋值无法触发页面更新,必须手动更新($scope.apply()),内置定时器可以出发页面的更新。


                                                        不积跬步无以至千里,不积小流无以成江海 

上一篇 下一篇

猜你喜欢

热点阅读