2017-10-16 109 views
0

我有一個角度$範圍變量,通過窗口事件實例化。 $ scope變量正確顯示給用戶,但更新不是通過ng-model設置的。奇怪的是,ng-change具有可用於手動設置範圍變量的正確值。

我真的不明白爲什麼會發生這種情況。

事件處理程序:

document.addEventListener('updateSearchBar', handleUpdate); 
function handleUpdate(eventData) { 
    $scope.benefitsFromDate = eventData.detail.fromDate; 
    $scope.$apply(); 
} 

前端:

<input 
    type="date" 
    name="fromDate" 
    ng-change="updateBenefitsFromDate(benefitsFromDate)" 
    ng-model="benefitsFromDate" 
/> 
<input 
    type="button" 
    value="Search" 
    class="btn btn-default" 
    ng-click="searchDocuments()" 
    ng-disabled="isSearchingDocuments" 
/> 

角片斷:

$scope.updateBenefitsFromDate = function(change) { 
    console.log($scope.benefitsFromDate); //still has old value 
    console.log(change); //has updated value when param is the $scope variable 
    //$scope.benefitsFromDate = change; //only way to update 
}; 

$scope.searchDocuments = function() { 
    //ng-model never updates the variable when the value is changed and uses the instantiated value 
    console.log($scope.benefitsFromDate); 
}; 

爲什麼不NG-模型反映這種變化,但通過$範圍。 ng-change函數中的benefitsFromDate具有更新的值嗎?

回答

0

我在處理這些類型的更新時使用$timeout模塊,並避免調用$scope.$apply()

$timeout(function() { 
    $scope.benefitsFromDate = eventData.detail.fromDate; 
}); 
0

我知道角度對於「點規則」非常挑剔。

我所要做的就是用我的數據值加前綴。

$scope.data = {}; 
$scope.data.benefitsFromDate = ...; 

或者你可以宣佈你的控制器使用as

ng-controller="appController as vm"