JQLite--$watch--$q.defer

  • jqLite

  • 作用:
  • 把一個(gè)dom節(jié)點(diǎn)轉(zhuǎn)成jq節(jié)點(diǎn),但是只包含了jquery一部分功能。
  • 如果說(shuō)已經(jīng)引入了jquery,那么使用angular.element(box);獲取的對(duì)象就是一個(gè)原生jquery對(duì)象
  • 方法:
  • 1.獲取dom節(jié)點(diǎn)
    var box = document.querySelector('.box');
  • 2.把dom節(jié)點(diǎn)轉(zhuǎn)換成jq節(jié)點(diǎn)
    box = angular.element(box);
  • $watch

  • $watch是$scope里面的一個(gè)方法
  • 使用:$watch('$scope身上的屬性',fun(newV,oldV)){}
  • 當(dāng)屬性值改變時(shí),會(huì)自動(dòng)調(diào)用回調(diào)方法fun()。newV:屬性改過(guò)之后最新的值。oldV:屬性修改之前的值。
  • 默認(rèn)情況下是不能直接監(jiān)聽(tīng)對(duì)象。如果想要監(jiān)聽(tīng)一個(gè)對(duì)象,加上第三個(gè)參數(shù)true ,為true可以監(jiān)聽(tīng)對(duì)象的變化。
  • 如何取消一個(gè)watch監(jiān)聽(tīng)?
    • 在調(diào)用$watch會(huì)返回一個(gè)方法。想要取消監(jiān)聽(tīng),直接執(zhí)行返回的方法即可。
  • 例子:
    per是對(duì)象,name是屬性
 //1.創(chuàng)建模板
        var app = angular.module('app', []);
        //2.創(chuàng)建控制器
        app.controller('myController', ['$scope', function ($scope) {
            $scope.name = 'xmg';
            var count = 3;
            var unWatch = $scope.$watch('per.name',function (newV,oldV) {
                console.log(newV+'-----'+oldV);
                count--;
                if (count == 0){
                    unWatch();   //取消監(jiān)聽(tīng)。
                }
            },true);   //為true可以監(jiān)聽(tīng)對(duì)象的變化
        }]);
        //3.綁定模塊
        //4.綁定控制器
    </script>
</head>
<body ng-app="app" ng-controller="myController">
<input type="text" ng-model="per.name">
<input type="text" ng-model="per.age">
<h1>{{per.name}}</h1>
<h1>{{per.age}}</h1>
  • 當(dāng)name在input中發(fā)生變化的時(shí)候,newV打印出來(lái)的是發(fā)生變化的值,oldV打印出來(lái)的是之前的值(因?yàn)闆](méi)有賦值,所以是undefined)
  • $q.defer(推斷方法)

  • $q是一個(gè)服務(wù),需要注入。
  • 使用:
  • 1.首先創(chuàng)建一個(gè)延時(shí)服務(wù),也就是用$q調(diào)用defer方法。
    var defer = $q.defer();
  • 2.推斷選擇執(zhí)行。發(fā)送網(wǎng)絡(luò)請(qǐng)求,有成功響應(yīng),也有失敗響應(yīng)。那么就會(huì)選擇一個(gè)執(zhí)行。這時(shí)候就使用這次發(fā)送請(qǐng)求的返回值(結(jié)果),再一次發(fā)送請(qǐng)求。
  //1.創(chuàng)建模板
        var app = angular.module('app', []);
        //2.創(chuàng)建控制器
     app.controller('myController', ['$scope','$http','$q', function ($scope,$http,$q) {
            var defer = $q.defer();

            $http({
                url:'url',
                method:'get',
          }).then(function (res) {     //請(qǐng)求成功,獲得返回值。用返回的值再一次發(fā)送請(qǐng)求
                defer.resolve(res);
          }).catch(function (error) {      
                defer.reject(error);
            });

          defer.promise.then(function (res) {         //上面請(qǐng)求成功對(duì)應(yīng)的再次請(qǐng)求。
                //resolve
                alert(res);
          },function (error) {
                //reject
                alert('error'+error);
            }).finally(function () {
                //finally一定會(huì)執(zhí)行。
                alert('fin');
            });
        }]);
        //3.綁定模塊
        //4.綁定控制器
    </script>
</head>
<body ng-app="app" ng-controller="myController">
</body>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容