2016-12-27 83 views
2

我已经创建了有一个“选项”一个简单的日期选择器指令。AngularJS - 如何刷新指令范围

于是我开始用日期选择器一组选项,然后业务逻辑的,因为我改变了这些选项,但这不是被刷新。

在这个例子中,我需要去的“结束日期”相同的日期作为“的startDate”的日期选择开始日期进行更新。

这里是我的代码:

指令:

function datepicker() { 
    return { 
     restrict: "A", 
     scope: { 
      options : '=' 
     }, 
     link: function(scope, element, attrs) { 

      var opts = scope.options || {}; 

      element.datepicker({ 
       keyboardNavigation: false, 
       forceParse: false, 
       autoclose: true, 
       useCurrent: true, 
       format: opts.format || 'dd/mm/yyyy', 
       startDate : opts.startDate || '' 
      }); 
     } 
    }; 
} 

控制器:

$scope.evaluation = {}; 

$scope.startDatepickerOptions = { 
    startDate : new Date() 
}; 

$scope.endDatepickerOptions = { 
    startDate : new Date() 
}; 

$scope.$watch('evaluation.startDate', function(newValue) { 
    $scope.endDatepickerOptions.startDate = newValue; 
}); 

查看:

<input type="text" ng-model="evaluation.startDate" name="startDate" datepicker options="startDatepickerOptions"/> 

<input type="text" ng-model="evaluation.endDate" name="endDate" datepicker options="endDatepickerOptions"/> 
+0

你吃过看看这个[SO问题](http://stackoverflow.com/questions/20 856824 /角指令-刷新上参数变化)? –

+0

不适合我 –

回答

1

所以这里的解决方案:

我需要在指令链接功能上添加一个平等观察器。到目前为止,由于日期/串的问题,我已经实现了moment.js library

下面是最终代码:

指令(链接功能)

link: function(scope, element, attrs) { 

    var opts = scope.options || {}; 

    element.datepicker({ 
     keyboardNavigation: false, 
     forceParse: false, 
     autoclose: true, 
     useCurrent: true, 
     format: opts.format || 'dd/mm/yyyy', 
     startDate : opts.startDate || '' 
    }); 

    scope.$watch('options.startDate', function(newValue) { 
     if(newValue) { 
      element.datepicker('setStartDate', newValue); 
      element.datepicker('setDate', ""); 
     } 
    }); 
} 

控制器

$scope.startDatepickerOptions = { 
    startDate : moment().toDate() 
}; 

$scope.endDatepickerOptions = { 
    startDate : moment().toDate() 
}; 

$scope.$watch('evaluation.startDate', function(newValue) { 
    if(newValue) 
     $scope.endDatepickerOptions['startDate'] = moment(newValue, "DD-MM-YYYY").toDate(); 
});