2013-08-06 41 views
1

我是相當新的角js,情況是這樣的:我有javascript datepicker,這是日期選擇彈出式輸入,輸入綁定到角模型。如何通過知道它在角度js中的路徑來獲得對模型屬性的引用?

問題據我所知,輸入值是從javascript而不是從UI改變,所以角度js不知道,該值已更改,因此它不會更新模型值。我發現sample with color picker,除了事實,我不想硬編碼要更新的屬性。

我會想象以下工作流程:
1.訂閱所有datepickers' onchanged事件
2.當事件被激活,讀取輸入(例如讀取NG-模型模型路徑屬性值,可能是有更好的方式?)
3.並使用該路徑更新模型中的值。我可以通過使用點和使用這些部分的訪問屬性來分割路徑,但我不知何故認爲,這應該已經在角js中實現了(至少在內部例程中)。

+0

答案中的硬編碼在哪裏,它允許將任何屬性分配給顏色選擇器指令。 – Chandermani

+0

正如我提到的問題,我不希望硬編碼事件處理程序中的確切屬性,我有多個日期選擇器在頁面綁定到模型的不同部分,不希望爲每個明確寫入事件處理。 – Giedrius

+1

不,指令中根本沒有硬編碼。指令作用域中定義的顏色屬性從html中的指令調用中獲取其初始值。所以如果你必須在多個地方使用這個指令,你可以執行'color-picker =「myColor1」.... color-picker =「myColor2」'等等。 – Chandermani

回答

1

您需要$scope.$apply通知AngularJS有關型號更改。我不知道哪個日期選擇你真正使用,但可能我可以看起來像:

$($element).datepicker({ 
    . 
    . 
    . 
}).on('changeDate', function(event){ 
    $scope.$apply(function(){ 
    $scope.date = event.date; 
    }); 
}); 

更多$applyAngularJS docs,在我看來,從吉姆·霍斯金斯的excellent article

+0

我不想明確地告訴我,我的模型有屬性'日期'。如果我使用'$('。date')。datepicker()'附加datepicker,並且具有像'project.creationDate','project.currentMilestone.deadlineDate'這樣的屬性 - 這意味着頁面中的許多日期選擇器,所有綁定到不同的日期選擇器模型的一部分。 – Giedrius

+4

我建議爲您的datepicker創建一個指令,該指令處理「changeDate」事件的事件訂閱,並且還允許您傳入模型屬性,以便將目標選定日期的結果作爲目標。例如,

。您將需要使用$ scope。$ apply(...)作爲上面推薦的@tschiela,以回到AngularJS $ scope。 – SonOfNun

0

@Chandermani正確地注意到,在我提到的顏色選擇器示例中,您可以指定要綁定到HTML的屬性,以解決我所描述的情況。

反正我已經看了成角的js的源代碼,並注意到,該$apply是更聰明,比我想,這樣回答我的問題標題,您可以向$apply給複雜的表達式,如賦值:

$('.date').datepicker() 
    .on('changeDate', function(e) { 
     var input = $(e.target).find('input'); 
     var currentScope = angular.element(input).scope(); 

     // exp will evaluate to something model.createdDate = '2013-08-06' 
     var exp = input.attr('ng-model') + '="' + input.val() + '"'; 
     currentScope.$apply(exp); 
    }); 
相關問題