2 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
Timeout 有它自己的作用域,因?yàn)樗且粋€(gè)閉包,所以 $scope.open = false 不會(huì)更新你的控制器 $scope.open 變量,你應(yīng)該避免使用 timeout for 來(lái)更新作用域變量。您應(yīng)該使用 bind as 綁定全局范圍 -
hideIt: function() {
this.timer = $timeout(function() {
this.open = false;
}.bind(this), 50);
}

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
在您的超時(shí)函數(shù)中,this
不引用 Dropdown 對(duì)象,而是可能引用該window
對(duì)象。在 javascript 中,this
總是指調(diào)用函數(shù)的對(duì)象,而不是定義它的對(duì)象。當(dāng) $timeout 調(diào)用您的回調(diào)函數(shù)時(shí),它會(huì)使用 Dropdown 對(duì)象以外的其他對(duì)象,因?yàn)樗恢涝搶?duì)象。
您需要this
將父函數(shù)中的值捕獲為閉包變量,或者使用angular.bind將回調(diào)函數(shù)綁定到 Dropdown 對(duì)象
添加回答
舉報(bào)