dom事件

时间:2017-10-16 21:18:17

标签: angularjs angularjs-scope dom-events

我有一个角度$ scope变量,可以通过窗口事件进行实例化。 $ 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"
/>

Angular片段:

$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-model不反映更改,但在ng-change函数中传递$ scope.benefitsFromDate是否具有更新值?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我了解到角度对于“点规则”很挑剔。

我所要做的就是在数据值前加上其他内容。

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

或者您可以声明您的控制器使用as

ng-controller="appController as vm"