如何更改元素的ng-model属性(并让它工作)?

时间:2013-07-28 04:16:44

标签: jquery angularjs angularjs-directive angularjs-module jqlite

我的输入ng-model属性设置为“search.name”

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");
});

有没有更好的方法可以使用指令来做到这一点?

3 个答案:

答案 0 :(得分:3)

如果我正确理解了问题,您可以根据输入框中输入的内容过滤数据。但是您还有其他链接可以自动更改搜索,可能是“常用搜索值”列表。

我会做的事情在Fiddle中列出。

基本上我建议使用ng-click链接或按钮来更新正在搜索的值。

示例:

标记

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

控制器

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

如果我不明白你的问题,我道歉。

-Thad

答案 1 :(得分:2)

您可能需要查看$setViewValue

  

“应该从DOM事件处理程序中调用此方法   示例输入或选择指令调用它。

     

它在内部调用所有解析器,如果结果值有效,   更新模型并调用所有已注册的更改侦听器。“

答案 2 :(得分: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");
    });
});