角度$范围摘要从dom事件更新

角度$范围摘要从dom事件更新

问题描述:

我有一个角度$范围变量,通过窗口事件实例化。 $ 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具有更新的值吗?

我在处理这些类型的更新时使用$timeout模块,并避免调用$scope.$apply()

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

我知道角度对于“点规则”非常挑剔。

我所要做的就是用我的数据值加前缀。

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

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

ng-controller="appController as vm"