加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在angularjs中自动更新范围变量

发布时间:2020-12-17 17:05:46 所属栏目:安全 来源:网络整理
导读:我正在玩AngularJS.我想从一个服务中返回一个变量,它将让范围知道它何时发生了变化. 为了说明这一点,请查看www.angularjs.org中的示例,“连接后端”.粗略地说,我们可以看到以下内容: var projects = $firebase(new Firebase("http://projects.firebase.io")
我正在玩AngularJS.我想从一个服务中返回一个变量,它将让范围知道它何时发生了变化.

为了说明这一点,请查看www.angularjs.org中的示例,“连接后端”.粗略地说,我们可以看到以下内容:

var projects = $firebase(new Firebase("http://projects.firebase.io"));
$scope.projects = projects;

在此之后,对项目对象所做的所有更新(通过更新,无论是本地还是远程)都将自动反映在范围绑定的视图上.

我怎样才能在我的项目中实现同样的目标?就我而言,我想从服务中返回一个“自我更新”变量.

var inbox = inboxService.inboxForUser("fred");
$scope.inbox = inbox;

什么机制让$scope知道它应该更新?

编辑:
针对这些建议,我尝试了一个基本的例子.我的控制器:

$scope.auto = {
    value: 0
};

setInterval(function () {
    $scope.auto.value += 1;
    console.log($scope.auto.value);
},1000);

而且,在我看来的某个地方:

<span>{{auto.value}}</span>

不过,它只显示0.我做错了什么?

解决方法

更新:

我做了一个演示plunker:http://plnkr.co/edit/dmu5ucEztpfFwsletrYW?p=preview
我使用$timeout伪造更新.

诀窍是使用普通的javascript引用:

>您需要将对象传递给范围.
>您不能覆盖该对象,只需更新或扩展它.
>如果你覆盖它,你将失去“绑定”.
>如果您使用$http,它将为您触发摘要.
>因此,每当发生更改时,范围变量引用在服务中更新的同一对象,并且将通过摘要通知所有观察者.
> AFAIK,这就是$firebase&重新工作.
>如果进行多次更新,则需要重置属性.
>由于您在应用程序中持有对象的引用,因此您需要了解内存泄漏.

例如:

服务:

app.factory('inboxService',function($http){

  return {
    inboxForUser: function(user){

      var inbox = {};

      $http.get('/api/user/' + user).then(function(response){
        angular.extend(inbox,response.data);
      })

      return inbox; 
    }
  };
});

控制器:

app.controller('ctrl',function(inboxService){
  $scope.inbox = inboxService.inboxForUser("fred");
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读