2013-02-06 57 views
7

我已經看到了大量關於這個問題的問題,他們似乎都通過調用$scope.$apply()$scope.$digest()或通過在輸入上觸發change()方法來解決。但我似乎無法使用任何這些方法。在這個小提琴中,我可以在框中輸入一個名字,並在輸入時更新模型值。但是,當我單擊鏈接時,要將輸入名稱設置爲特定值,我希望更新模型名稱。我需要做什麼?dom的角JS更新模型

我試圖做到這一點的原因是我希望能夠刷新我的角模型,當用戶自動填充表單,使用瀏覽器自動填充或LastPass或類似的。當然,有一些角度命令可以從DOM中刷新模型?

http://jsfiddle.net/PXCUq/

$(function() { 
    $('#setFirstName').click(function() { 
     $('input.firstname').val('Test Name'); 
     angular.element($('input.firstname')[0]).scope().$apply(); 
     // Model still not updated 
    }); 
}); 
+0

有沒有原因,你不這樣做,而是這樣呢?:'set first name'? –

+0

我正在尋找解決方法使瀏覽器表單自動填充工作。這是一種簡單的方法,可以在沒有用戶輸入的情況下更改價值,以展示問題。 –

回答

5

獲取範圍,然後更改NG-模型屬性:

$('#setFirstName').click(function() { 
    var scope = angular.element($('input').get(0)).scope() 
    scope.firstname = 'Test Name'; 
    scope.$apply(); 
}); 

您能想出一個更好的jQuery選擇。我只專注於角度部分。

Fiddle

+0

這將工作......所以要從dom刷新模型,我需要遍歷每個元素,獲取其ng-model屬性,並設置模型值。在Angular中真的沒有辦法做到這一點嗎? –

+0

你不需要通過每個元素來獲得它的範圍。你只需要一次範圍。像:'scope = angular.element($('div [ng-view]> *)[0])。scope()' – slowpoison