Angular $ watch事件有效,而ng-init上几乎相同的函数则没有

时间:2018-01-22 06:28:03

标签: javascript angularjs

我在 Angular 中有两个函数调用,第一个在ng-init事件中使用它调用:

ng-init="dateCall()"

功能是:

$scope.dateCall = function() {
    var date, endDate;
    $scope.start_date = $filter('date')(new Date(), 'MM/dd/yyyy');
    date = new Date($scope.start_date);
    $scope.season = $scope.fundraiser_seasons.find(function(e) {
        return Date.create(e.start_date) <= date && date <= Date.create(e.end_date);
    });
    endDate = $filter('date')(new Date($scope.season.end_date), 'MM/dd/yyyy');
    return $scope.end_date = endDate;
};

由于某种原因,不会返回$scope.season的值。但是,每当我更改$scope.start_date.

的值时,这个几乎完全相同的事件就会完全正常
$scope.$watch("start_date", function(start_date) {
    var date, endDate;
    if ($scope.fundraiser_seasons.length === 0) {
        return;
    }
    date = new Date(start_date);
    $scope.season = $scope.fundraiser_seasons.find(function(e) {
        return Date.create(e.start_date) <= date && date <= Date.create(e.end_date);
    });
    endDate = $filter('date')(new Date($scope.season.end_date), 'MM/dd/yyyy');
    return $scope.end_date = endDate;
});

我一直在对此进行故障排除,无法让它工作,我觉得我必须错过一些愚蠢的东西。基本上我只是希望它根据应用程序加载的今天返回end_date - 我知道该值的返回在$watch函数中正常工作。提前谢谢。

2 个答案:

答案 0 :(得分:1)

在NgInit事件中使用时,$scope.fundraiser_seasons中很可能有一个空数组。

而不是将相同的逻辑存储在两个单独的函数重构中,代码使用相同的逻辑,如下所示

$scope.dateCall = function() {
    $scope.start_date = $filter('date')(new Date(), 'MM/dd/yyyy');
    var date = new Date($scope.start_date);
    calcDate(date);
};

$scope.$watch("start_date", function(start_date) {

    var date = new Date(start_date);
    calcDate(date);
});

var calcDate = function(date){

    if ($scope.fundraiser_seasons.length === 0) {
        return;
    }

    $scope.season = $scope.fundraiser_seasons.find(function(e) {
        return Date.create(e.start_date) <= date && date <= Date.create(e.end_date);
    });
    var endDate = $filter('date')(new Date($scope.season.end_date), 'MM/dd/yyyy');
    return $scope.end_date = endDate;
};

答案 1 :(得分:0)

如果你想使用ng-init的返回值,你可以分配它

ng-init="result=dateCall()"

我不确定$ watch的返回值是什么意思。 回到谁?它毫无意义。