1

我有一個ng-model屬性設置爲「search.name」如何更改元素的ng-model屬性(並使其工作)?

HTML

Search: 
<span id="searchName"> titles </span> | <span id="searchSpecies"> species </span>: 

<input type="text" data-ng-model="search.name" /> 

我怎樣才能改變這個屬性被點擊另一個元素時,像一個鏈接或按鈕,和輸入讓我的過濾器使用更新後的屬性?現在,即使我已更新屬性,過濾器的行爲就好像沒有更新過。

這是我更新的屬性:

SCRIPT

$("#searchName").click(function() { 
    $("input").attr("data-ng-model", "recipesearch.name"); 
}); 
$("#searchSpecies").click(function() { 
     $("input").attr("data-ng-model", "recipesearch.species"); 
}); 

有沒有更好的方式來與指令可能做到這一點?

+2

Angular必須編譯您的html並在所有綁定上創建手錶。如果您要更改綁定表達式,則需要再次編譯html元素以更新綁定。我不確定如何完全做到這一點。 – Chandermani

回答

1

包裹裏面$(document).ready()代碼如下

,並且確保你已經添加鏈接到jQuery庫

Demo

$(document).ready(function() { 
    $("#searchName").click(function() { 
     $("input").attr("data-ng-model", "recipesearch.name"); 
    }); 
    $("#searchSpecies").click(function() { 
     $("input").attr("data-ng-model", "recipesearch.species"); 
    }); 
}); 
+0

啊,好吧。這確實會改變屬性。但是,即使屬性已更改,angular仍將屬性字段視爲最初放置的屬性「recipesearch.name」。隨後它對我的角度過濾器沒有影響。 – LazerSharks

2

你可能想看看$setViewValue

「這個方法應該從a中調用DOM事件處理程序。對於 示例輸入或select指令調用它。

它在內部調用所有的解析器,如果結果值是有效的, 更新模型,並呼籲所有已註冊的更改偵聽。」

3

如果我理解正確的問題,您擁有的數據是基於過濾形式在

是什麼類型的輸入框。但你也有其他鏈接,可以自動改變搜索對你來說,也許是一個「共同搜索值」列表。

我會做在這個Fiddle概述。

基本上我建議使用ng鍵點擊你的鏈接或按鈕來更新正在搜索的值。

例子:

標記

<a href="#" ng-click="changeSearchTo('Cat')">Cat</a> 

控制器

$scope.changeSearchTo = function (searchCriteria) { 
    $scope.search = { 
     name: searchCriteria 
    }; 
}; 

如果我不明白你的問題,我表示歉意。

-Thad

+0

Thad,不需要道歉!我感謝您的幫助。不幸的是,這並不是我想到的。此解決方案更改輸入框中輸入的值,但是我想改爲在HTML中更改'ng-model'的值。例如,將'ng-model =「search.name」'更改爲'ng-model =「search.ingredients」'。所以'search.name'變成'search.ingredients'。我能夠使用jQuery進行屬性更改,但它仍然像「search.name」一樣起作用。我認爲這與@Chandermani上面關於重新編譯所說的有關。 – LazerSharks

+0

啊......現在明白了。謝謝。 :) –

相關問題