2013-05-15 25 views
1

對於一個日期選擇器控制提到我增加了一些自定義屬性的輸入元素:我怎麼能訪問範圍乏的屬性

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

對於我創建了一個指令,建立日期選擇器:

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

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

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

如何訪問變更屬性中提到的範圍變量?在我上面的例子,我想訪問$scope.currentAppointment.start

回答

3

您可以使用$parse服務:

var model = $parse($attributes.changedates) 

獲得價值

model($scope) 

設定值

model.assign($scope, value) 
0

如果你不」您需要在您的指令中設置/更改currentAppointment.start的值,並且您需要檢測值更改時,使用$watch(而不是$parse):

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

fiddle - 在小提琴,我包括一個按鈕,改變了currentAppointment.start價值,所以你可以觀察手錶注意到的變化(通過控制檯)。

+0

如果我理解正確,應該使用$ parse時,有一個孤立的範圍和值需要改變。否則使用$ watch? $ eval呢? –

+1

@FlorianF,使用$ parse或$ watch或$ eval來獲取值。如果值可能改變,請使用$ watch,即您的指令需要對值的更改作出反應。如果沒有隔離範圍並且指令需要能夠更改該值,請使用$ parse($ eval也可以使用,但它不是那麼幹淨:[example](http://stackoverflow.com/a/ 215945分之16494482))。 –

+0

好的,我明白了,謝謝!如果我理解正確,那麼很好的使用$ eval就是當這個值不會改變,並且這個指令不需要改變這個值。 –