当前位置: 首页 > 面试题库 >

在工厂发出GET请求后,AngularJs $ scope不更新

韦飞尘
2023-03-14
问题内容

我一直在尝试AngularJS进行实验项目,但我遇到了这个问题。在我的html中,我想显示项目列表

Index.html

<h1>Some list</h1>
<div ng-controller="datlist">
    <div ng-repeat="item in items">
        <div>Item description: {{item.description}}</div>
        <div>Item name: {{item.name}}</div>
    </div>
</div>

最初,我只是使用一个简单的控制器来获取信息并使用以下命令更新视图:

controllers.js(原始)

function datlist($scope,$http){
$http({method: 'GET', url: 'http://localhost:61686/getdatlist?format=json', headers: {'Access-Control-Allow-Origin': 'localhost:*'}}).
    success(function(data, status, headers, config) {
        $scope.items=data.itemsToReturn;
        console.log(data);
}).
error(function(data, status, headers, config) {
    console.log("fail");
});

}

这工作得很好,我可以获得项目清单。同时,通过更改我的结构以使用工厂发出相同的请求并将其绑定到$ scope.items,该命令将不起作用。我尝试了许多$
watch的变体,但无法更新$ scope.items。我发现了一些有关$ apply的信息,但我真的不明白如何使用它。

controllers.js(新版本)

var datModule = angular.module('datModule',[]);
datModule.controller('datlist', function ($scope, datfactory){
    $scope.items = datfactory.getlist();
    $scope.$watch($scope.items, $scope.items = datfactory.getlist());
});
datModule.factory('datfactory', function ($http){
    var factory = {};
    factory.getlist = function(){
        $http({method: 'GET', url: 'http://localhost:61686/getdatlist?format=json', headers: {'Access-Control-Allow-Origin': 'localhost:*'}}).
        success(function(data, status, headers, config) {
            console.log(data.itemsToReturn); //I get the correct items, all seems ok here
            return data.itemsToReturn;
        }).
        error(function(data, status, headers, config) {
            console.log("fail");
        });

    }
    return factory;
});

关于这个的任何想法都会很棒。PS:我发现很多帖子都在谈论这个问题,但是没有一个帮助我获得完整的解决方案。

谢谢


问题答案:

为此使用手表是很丑的。

试试这个:

datModule.factory('datfactory', function ($http, $q){

    this.getlist = function(){            
        return $http.get('http://localhost:61686/getdatlist?format=json',{'Access-Control-Allow-Origin': 'localhost:*'})
            .then(function(response) {
              console.log(response); //I get the correct items, all seems ok here
              return response.data.itemsToReturn;
            });            
    }
    return this;
});

datModule.controller('datlist', function ($scope, datfactory){
    datfactory.getlist()
      .then(function(arrItems){
         $scope.items = arrItems;
       });
});

这就是您对异步事务使用promise的方式。

更新(15.01.2015):现在更时尚!



 类似资料:
  • 问题内容: 我是AngularJS的新手,觉得很有趣,但是对于以下情况我不太清楚。 我分配并使用返回数据时遇到错误,无论如何我可以将返回数据分配给吗? 问题答案: 您通常不在工厂,服务或提供商内部使用。通常,您将返回(由返回),然后在控制器(您确实有)中处理promise 。 控制器功能:

  • 我需要向这个网址发出获取请求: 标签中调用的 谢啦

  • 问题内容: 我的工厂看起来像: 它吐出日志,但不更改路径。我该怎么做才能做到这一点? 问题答案: $ location 的文档说: 请注意,设置员不会立即更新window.location。而是$ location服务知道作用域的生命周期,并在作用域$ digest阶段将多个$ location突变合并为一个“ commit”到window.location对象。 因此,如果拒绝诺言对产生影响,那

  • 请求方式: "|3|1|url|\r" 参数: url 设置Get请求的url链接 返回值: "|3|code|data|\r" 参数: code http请求返回的成功或者错误码, 成功:code = 200 获取数据失败:code = -1 http请求字段错误:code = 1 data http请求返回的数据 Arduino样例: softSerial.print("|3|1|http:/

  • 问题内容: 我有以下指令: 这是我如何调用它: 首次初始化指令时,则为空。稍后,通过ajax对其进行检索,并填充其值。 问题是,我怎么看待更新的价值?当我从链接方法执行此操作时: 初始化指令时,仅调用一次,然后该值为空。通过ajax(来自)检索值时,不会再次调用此watch函数。但是,在我要显示的页面的其他部分,该值在获取ajax请求时会更新。因此,我认为问题与在ajax请求之后执行无关。 编辑:

  • 问题内容: 我希望对其他服务器上的另一个脚本进行简单的GET请求。我该怎么做呢? 在一种情况下,我只需要请求一个外部脚本,而无需任何输出。 在第二种情况下,我需要获取文本输出。 老实说,我不想弄乱CURL,因为这实际上不是CURL的工作。我也不想使用http_get,因为我没有PECL扩展名。 fsockopen可以工作吗?如果是这样,该如何在不读取文件内容的情况下执行此操作?有没有其他办法? 谢