我如何访问属性中提到的范围变量

时间:2013-05-15 08:57:50

标签: angularjs

对于datepicker控件,我在输入元素中添加了一些自定义属性:

<input id="inputDatepicker" ng-model="currentAppointment.date" data-date-format="dd.mm.yyyy" datepicker changedates="currentAppointment.start">

为此,我创建了一个构建datepicker的指令:

.directive('datepicker', function ($filter) {
    return {
      restrict: 'A',
      require: '?ngModel',
      link: function ($scope, $element, $attributes, $ctrl) {       

        $scope[$attributes.changedates] ... do not work

        $element.datepicker();    
      }
    }
});

我如何访问changedates-attribute中提到的范围变量?在上面的示例中,我想访问$scope.currentAppointment.start

2 个答案:

答案 0 :(得分:3)

您可以使用$parse服务:

var model = $parse($attributes.changedates)

获得价值

model($scope)

设置值

model.assign($scope, value)

答案 1 :(得分:0)

如果您不需要在指令中设置/更改currentAppointment.start的值,并且需要检测值何时更改,请使用$watch(而不是$parse) :

link: function (scope, element, attrs, ctrl) {
    scope.$watch(attrs.changedates, function(value) {
        console.log('value=', value);
    });
}

fiddle - 在小提琴中,我添加了一个更改currentAppointment.start值的按钮,因此您可以观察到注意到更改的手表(通过控制台)。