AngularJS失去参考服务的重新分配变量? [英] AngularJS losing reference to service variable on re-assignment?

查看:125
本文介绍了AngularJS失去参考服务的重新分配变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道那句更好的方法这个问题。我已经写了由两个控制器使用的基本服务。

I didn't know a better way to phrase that question. I've written a basic service to be used by two controllers.

的jsfiddle: http://jsfiddle.net/aditya/2Nd8u/2/

JsFiddle: http://jsfiddle.net/aditya/2Nd8u/2/

点击通知按预期工作;它添加到阵列的通知。但是,重置打破它。点击任一按钮后,重置并没有做任何事情。有谁知道这是怎么回事吗?

Clicking 'notify' works as expected; it adds a notification to the array. But 'reset' breaks it. Clicking either button after 'reset' doesn't do anything. Does anyone know what's going on here?

PS。我认为这是与角丢失,因为 notifs 引用正在重新分配(技术上),所以我写了getter和setter方法​​,但即使清空阵列包括 POP() ING,直到它是空的,这似乎不是很有效。

PS. I think it has something to do with Angular losing the reference since notifs is being re-assigned (technically), so I wrote getters and setters, but even emptying the array involves pop()ing till it's empty, which doesn't seem very efficient.

Plunkr如果是的jsfiddle下来: http://plnkr.co/edit/mzfLLjFXCwsxM5KDebhc

Plunkr if JsFiddle is down: http://plnkr.co/edit/mzfLLjFXCwsxM5KDebhc

推荐答案

我改变了你的服务,这样的:

I changed your service to this:

.factory("notificationService", function(){
    var notifications = [];
    return {
        notifs: notifications,
        clear: function(){
            angular.copy([], notifications);
        },
        get: function(){ 
            return notifs; 
        }
    }
})

和控制器:

$scope.reset = function(){
        console.log("reset");
        notificationService.clear();
        console.log(notificationService);
    }

和它为我工作。

当然它应该是一点点整洁,在代替notifs你应该有一个get,并添加和删除的方法,但我只是想告诉你,其中code改变。
angular.copy 是可以确保的更改角的生命周期内取得的方法。

Naturally it should be a little bit tidier, in that instead of notifs you should have a get, and add and a remove method, but i just wanted to show you where the code changed. The angular.copy is the method that makes sure the changes are made within angular's lifecycle.

正如你不能绑定变量,但只有方法,你可以这样做:

As you can't bind variable but only methods, you could do this:

$ scope.getNotifications = notificationService.get;

这应该工作。

这篇关于AngularJS失去参考服务的重新分配变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆