第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

AngularJS:在調(diào)用$Scope.$Apply()時(shí)防止已經(jīng)在進(jìn)行的錯(cuò)誤$摘要

AngularJS:在調(diào)用$Scope.$Apply()時(shí)防止已經(jīng)在進(jìn)行的錯(cuò)誤$摘要

慕虎7371278 2019-06-06 15:38:08
AngularJS:在調(diào)用$Scope.$Apply()時(shí)防止已經(jīng)在進(jìn)行的錯(cuò)誤$摘要我發(fā)現(xiàn)我需要手動(dòng)更新我的頁(yè)面到我的范圍越來(lái)越多,因?yàn)闃?gòu)建一個(gè)應(yīng)用程序的角度。我知道的唯一辦法就是打電話$apply()我的控制器和指令的范圍。這樣做的問(wèn)題是,它不斷向控制臺(tái)拋出一個(gè)錯(cuò)誤,該控制臺(tái)讀?。哄e(cuò)誤:美元摘要已經(jīng)在進(jìn)行中有沒(méi)有人知道如何避免這一錯(cuò)誤,或者以不同的方式實(shí)現(xiàn)相同的目標(biāo)?
查看完整描述

3 回答

?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊

不要使用這種模式-這將導(dǎo)致的錯(cuò)誤多于解決的錯(cuò)誤。即使你認(rèn)為它能解決一些問(wèn)題,它卻沒(méi)有。

您可以檢查$digest已經(jīng)在通過(guò)檢查$scope.$$phase.

if(!$scope.$$phase) {
  //$digest or $apply}

$scope.$$phase會(huì)回來(lái)"$digest""$apply"如果$digest$apply正在進(jìn)行中。我相信這些州之間的區(qū)別在于$digest將處理當(dāng)前范圍的表及其子表,以及$apply將處理所有范圍的觀察者。

@dnc 253的觀點(diǎn),如果你發(fā)現(xiàn)自己在打電話$digest$apply經(jīng)常,你可能做錯(cuò)了。當(dāng)需要更新范圍的狀態(tài)時(shí),我通常會(huì)發(fā)現(xiàn)需要消化,因?yàn)镈OM事件是在角范圍之外觸發(fā)的。例如,當(dāng)Twitter引導(dǎo)模式被隱藏時(shí)。有時(shí),DOM事件會(huì)在$digest正在進(jìn)行中,有時(shí)沒(méi)有。所以我才用這張支票。

如果有人知道的話,我很想知道更好的方法。


來(lái)自評(píng)論:by@anddoutoi

angular.js反模式

  1. 別這樣

    if (!$scope.$$phase) $scope.$apply()

    ,這意味著

    $scope.$apply()

    在呼叫堆棧中不夠高。


查看完整回答
反對(duì) 回復(fù) 2019-06-06
?
開(kāi)心每一天1111

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊

最近一次與角質(zhì)人的討論就是關(guān)于這個(gè)話題的:由于將來(lái)的防偽原因,您不應(yīng)該使用$$phase

當(dāng)按下“正確”的方法來(lái)做這件事時(shí),答案是當(dāng)前的。

$timeout(function() {
  // anything you want can go here and will safely be run on the next digest.})

最近,我在編寫棱角服務(wù)來(lái)包裝Facebook、Google和TwitterAPI時(shí)遇到了這種情況,這些API在不同程度上都有回調(diào)。

下面是服務(wù)內(nèi)部的一個(gè)示例。(為了簡(jiǎn)潔起見(jiàn),服務(wù)的其余部分-設(shè)置變量、注入$timeout等等)。-已經(jīng)停止了。)

window.gapi.client.load('oauth2', 'v2', function() {
    var request = window.gapi.client.oauth2.userinfo.get();
    request.execute(function(response) {
        // This happens outside of angular land, so wrap it in a timeout 
        // with an implied apply and blammo, we're in action.
        $timeout(function() {
            if(typeof(response['error']) !== 'undefined'){
                // If the google api sent us an error, reject the promise.
                deferred.reject(response);
            }else{
                // Resolve the promise with the whole response if ok.
                deferred.resolve(response);
            }
        });
    });});

注意,$timeout的延遲參數(shù)是可選的,如果未設(shè)置,默認(rèn)為0($超時(shí)值打電話$Browser.推遲哪一個(gè)如果沒(méi)有設(shè)置延遲,默認(rèn)為0)

有點(diǎn)不直觀,但這是男人寫角度的答案,所以這對(duì)我來(lái)說(shuō)已經(jīng)足夠好了!


查看完整回答
反對(duì) 回復(fù) 2019-06-06
?
翻翻過(guò)去那場(chǎng)雪

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊

摘要周期是一個(gè)同步調(diào)用。在完成之前,它不會(huì)將控制權(quán)讓給瀏覽器的事件循環(huán)。有幾種方法可以解決這個(gè)問(wèn)題。處理這一問(wèn)題的最簡(jiǎn)單方法是使用內(nèi)置的$timeout,第二種方法是如果使用下劃線或存檔(應(yīng)該是這樣),則調(diào)用以下命令:

$timeout(function(){
    //any code in here will automatically have an apply run afterwards});

或者如果你有房客:

_.defer(function(){$scope.$apply();});

我們嘗試了幾種解決方法,我們討厭將$rootScope注入到所有控制器、指令甚至一些工廠中。因此,到目前為止,$timeout和_.delayer一直是我們最喜歡的。這些方法成功地告訴角直到下一個(gè)動(dòng)畫循環(huán),這將保證當(dāng)前范圍。$Apply已經(jīng)結(jié)束。


查看完整回答
反對(duì) 回復(fù) 2019-06-06
  • 3 回答
  • 0 關(guān)注
  • 1530 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)