【问题标题】:angularJS - ng-model is not updatingangularJS - ng-model 没有更新
【发布时间】:2014-04-15 06:47:31
【问题描述】:

在完成了一些关于AngularJS 的教程之后,我现在正在自己编写我的第一个示例应用程序。我从显示一个非常简单的员工列表开始,效果很好。现在我想添加一个简单的文本过滤器,就像我在教程中学到的那样。

我在我的 html 列表中添加了一个带有 ng-model="filterText"| filter: filterText 的输入,并在我的 angularJS 控制器中添加了 $scope.filterText = null;

当我现在在输入中输入任何内容时,什么都没有发生。当我将filterText 值直接设置到我的AngularJS 控制器时,过滤器正在工作,因此更新textFilter 的值肯定有问题。

我该怎么做才能让它工作?我已经在寻找解决方案,但没有任何帮助。

我的html:

<div class="container main-frame" ng-app="Employees" ng-controller="mainController" ng-init="init()">

<div id="searchbox">
    <label>Filter: </label>
    <input type="text" ng-model="filterText" />
</div>

<div id="emplist">

    <h2>Employees</h2>

    <p>
        <ul id="emps">
            <li ng-repeat="mitarbeiter in results | filter: filterText">
                # {{mitarbeiter.id}} - <strong>{{mitarbeiter.name}}</strong>
            </li>
        </ul>
    </p>

</div>

我的 angularJS:

var app = angular.module('Employees', []);

app.controller("mainController", function ($scope) {

    $scope.results = [];
    $scope.filterText = null;

    $scope.init = function(){

        jsonObject = eval(jsonfunction("parameters"));

        angular.forEach(jsonObject, function (mitarbeiter, key) {

            $scope.results.push(mitarbeiter);

        });

    }

})

编辑:

根据NidhishKrishnan的回答:

在 firebug 中,我的 jsonObject 如下所示:

[{"id":1,"name":"John"},{"id":2,"name":"Jane"},{"id":3,"name":"Peter"}]

我用这个 jsonObject 更改了工作解决方案,它仍然工作正常,所以这应该不是问题......

更多信息:我正在使用 Web api 2 控制器在 VS 2013 调试模式下工作,该控制器获取 sql 数据库的数据。我的 jsonfunction 只不过是对控制器的 ajax 请求。

EDIT2:

当我不使用eval() 时,没有任何变化。我成功获取了我的列表,但我无法使用过滤器...这是我的 Ajax 请求:

function jsonfunction(par) {

    $.ajax({

        url: url + par,

        async: false,

        success: function (data) {

            json = data;

        },

        headers: getSecurityHeaders()

    });

    return json;

}

答案在我的WebApiConfig.cs 中格式化为 JSON。不可能有任何错误...

【问题讨论】:

  • json函数未定义.....
  • 哦... jsonfunction 工作正常。列表正在显示。我只是没有将代码添加到这个问题中。 jsonfunction 给了我一个格式良好的 json 对象。我已经使用这个功能很长时间了,所以应该没有问题。我就是不能使用过滤器。
  • 看看我的答案,jsonfunction返回一个json,如图所示,一切正常,甚至过滤一切正常
  • 希望你已经理解了......
  • 为什么还需要eval?使用它从来都不是一个好主意。

标签: javascript angularjs ng-repeat angular-ngmodel


【解决方案1】:

jsonObject javascript 变量应该得到如下所示的一些数据

jsonObject=[{id:1,name:'Jessey'},
            {id:2,name:'John'},
            {id:3,name:'Mathew'},
            {id:4,name:'Sunny'}];  

但是在您的代码中 jsonfunction 没有定义,使用 eval 进行评估的目的是什么,我们需要返回一个 JSON 然后一切甚至过滤器都将按预期正常工作

jsonObject = eval(jsonfunction("parameters"));  

也不要混淆JQueryAngularJS,因为这不是一个好的做法,请阅读 - Using Jquery UI plugin with Angular

对于AJAXAngularJS本身提供$http

A Working Example

编辑 1

$scope.init = function()
{
        $http({
            method: 'GET',
            url: '/someUrl'
             }).
        success(function (data, status, headers, config) {
            angular.forEach(data, function (mitarbeiter, key) {
                $scope.results.push(mitarbeiter);
            });
        }).
        error(function (data, status, headers, config) {
        });    
}

【讨论】:

  • 感谢您的回答,但我仍然很困惑。我编辑了我的问题,如果你能看一下就太好了。我的 jsonObject 在您的示例中也可以使用...与我的项目设置相关的 angularJS 是否有任何问题?
  • 你能告诉我你定义的ajax调用,你说它返回一个JSON
  • 再次编辑了我的问题。我没有 eval() 的请求没有任何改变。我在上面发布了我的 Ajax 请求。我认为应该没有问题。
  • @Fabi 一个建议...不要将 jquery 与 angular 混为一谈,这不是一个好的做法,因为 ajax Angular 本身提供了$http
  • @Fabi 查看我的编辑.....通过将角度循环引入 ajax 调用的成功块来做出承诺
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多