AngularJs交互

angular交互:
1、請求一個文本文件,內容顯示到頁面
發(fā)現(xiàn)問題:
jquery的ajax請求數(shù)據(jù)——正常
請求回來的數(shù)據(jù)放到 $scope.arr —— 正常
問題: 沒有顯示在頁面
因為: angular 比較封閉,和其它框架、庫配合不好。

2、angular提供了自己的做數(shù)據(jù)交互的方式:
$http —— 依賴項
依賴項: $scope $http

用法:
    $http.get();
    $http.post();
    $http.jsonp();

$http.get('請求地址').then(成功的回調,失敗的回調);

$http.get('a.txt').then(r=>{
    //r 就是成功后的返回對象  ***r完整的angular http返回對象
    // r.data 才是數(shù)據(jù)
},err=>{
    //err 失敗信息對象
});

小總結:
ng-src
$http.get('接口/地址').then((r)=>{
r//完整的對象
//{data: Array[4], status: 200, config: Object, statusText: "OK"}
r.data
},(r)=>{
console.log(r)
})

3、Promise
回調函數(shù) —— 惡夢 噩夢 解決$ajax嵌套和回調函數(shù)(
Promise對象: 代表了未來某個將要發(fā)生的事件(通常是一個異步操作)
有了promise對象, 可以將異步操作以同步的流程表達出來, 避免了層層嵌套的回調函數(shù)

1)用法——基本用法:
    resolve: 成功
    reject: 失敗
    let pro = new Promise((resolve,reject)=>{
        $.ajax({
            url:'',
            dataType:'json',
            success:r=>{
                resolve(r);
            },
            error:err=>{
                reject(err);
            }
        });
    });

    pro.then(成功的回調,失敗的回調);
    pro.then((r)=>{
        //r 成功后返回結果 ,處理成功的數(shù)據(jù)信息
    },(err)=>{
        //err  失敗對象,處理失敗信息
    });

2)用法 —— 常規(guī)用法
    Promise.all();
    批量處理異步請求,統(tǒng)一處理成功的回調
    Promise.all([
        //請求1 的 Promise
        //請求2 的 Promise
    ]).then(成功回調,失敗回調);
    全部成功才算成功,有一個失敗就是整體失敗。

2、交互
$http —— 依賴項 ($scope $http)
$http.get();
$http.post();
$http.jsonp();

$http.get('請求地址').then((r)=>{
    //成功
    //r.data
},(err)=>{
    //失敗
});

3、Promise
1)基本用法,發(fā)一個請求
new Promise((resolve,reject)=>{
$.ajax({
url:
dataType:
success(r){
resolve(r);
},
error(err){
reject(err);
}
});
}).then((r)=>{
//成功了
},(e)=>{
//失敗了
});

2)Promise.all()
    Promise.all([
        //發(fā)請求的Promise對象
        new Promise(),
        new Promise(),
        ....
    ]).then(r=>{
        //以上數(shù)組中,指定的所有的請求,全部都成功,才是成功
    },err=>{
        //以上數(shù)組中,指定的所有的請求,只要有一個失敗,就是失敗
    });

沒法做SEO
怎么知道一個變量發(fā)生了改變?
1.添加一個方法(set()) 設置變量的值 set 被調用時候 比較一下
2.一般臟檢查,將對象復制一份快照,在某個時間 比較現(xiàn)在對象與快照的值
如果不一樣就表明發(fā)生變化 這個策略要保留兩份變量 而且要遍歷對象
比較屬性 這樣會有 一定性能問題
3.它的策略
1.不會臟檢查所有對象 當對象被綁定到html中 這個對象添加為檢查對象
2.不會臟檢查所有的屬性,同樣當屬性被綁定后 這個屬性會被列為檢查的屬性
在它初始化時 會將綁定的對象的屬性添加為監(jiān)聽對象 也就是說一個對象綁定N個屬性
就會添加N個watcher (意思是 綁定一個name屬性 然后n個地方用 就會添加n個watcher);
什么時候去臟檢查
angular所系統(tǒng)的方法中都會觸發(fā)比較事件
比如:controller初始化的時候 所有ng-開頭的事件執(zhí)行后 都會觸發(fā)臟檢查
不要在conroller中做以下事情
1.不要在controller中做DOM操作 大大影響了應用邏輯的可測試性 可以把表現(xiàn)邏輯抽取到directive(指令中);
2.輸入格式化 使用angular form controls代替 (去看)
3.輸出格式化 使用angular filter 代替
4.執(zhí)行無狀態(tài)或者有狀態(tài)的、controller共享的代碼 angular service(去看)代替

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容