AngularJS工厂不保留价值

时间:2017-10-05 13:35:13

标签: javascript angularjs

我创建了一个简单的工厂来存储来自我的authService的值:

app.factory("subfactory",
        function() {
            var subValue = {};
            return {
                set: set,
                get: get
            };

            function get() {
                return subValue;
            }

            function set(value) {
                subValue = value;
            }
        });

我在authservice中保存了这样的价值 - 这不是完整的服务,只是使用subfactory.set()显示我在哪里保存值的代码段:

 mgr.getUser().then(function (user) {
        if (user) {
            var idToken = user.id_token;
            var dataIdToken = getDataFromToken(idToken);
            subfactory.set(dataIdToken.sub);
        } else {
            //console.log("User not logged in");
        }
    });

但是当我尝试在控制器中读取对象时它是空的:

    vm.onGridLoad = function() {

        var storedValue = subfactory.get();

        console.log(storedValue);

2 个答案:

答案 0 :(得分:1)

我会以不同的方式写工厂,但那只是我。

app.factory("subfactory",
        function() {

           var service = {};
           service.subValue = {};

            service.save = save;

            return service;

            function save(value) {
                service.subValue = value;
            }
        });

然后你将工厂注入你需要的任何控制器。 返回服务对象时不需要get方法,只需使用service.subValue即可返回值。如果您不喜欢它,那么随意将其更改为您喜欢的任何内容。

代码未经测试但应足够接近以解决您的问题。

您没有指定您拥有什么样的角度应用程序,是否为水疗中心?在初始保存后重新加载页面?例如,如果您在导航到另一个页面时重新加载页面,则JavaScript将重新加载,您将丢失工厂中保存的状态。在这种情况下,您可以存储您想要保存的任何内容,例如localStorage。

答案 1 :(得分:0)

在您的服务上使用new Thread( new MyRunnable( "RUN_A", true ), "A" ).start(); //$NON-NLS-1$ //$NON-NLS-2$ new Thread( new MyRunnable( "RUN_B", false ), "B" ).start(); //$NON-NLS-1$ //$NON-NLS-2$

private static class MyRunnable implements Runnable {

        private String name;
        private boolean singleColor;

        public MyRunnable( String name, boolean singleColor ) {
            this.name = name;
            this.singleColor = singleColor;
        }

        @Override
        public void run() {
            Color colorA = null;
            Color colorB = null;

            if ( singleColor ) {
                colorA = new Color( Display.findDisplay( Thread.currentThread() ), 255, 0, 128 );
            } else {
                colorA = new Color( Display.findDisplay( Thread.currentThread() ), 193, 98, 107 );
                colorB = new Color( Display.findDisplay( Thread.currentThread() ), 146, 190, 137 );
            }

            Display display = new Display();
            Image image = new Image( display, 1000, 1000 );
            GC gc = new GC( image );

            int items = 20;

            for ( int i = 0; i < items; i++ ) {
                for ( int j = 0; j < items; j++ ) {
                    int x = i * ( 1000 / items ) + ( 1000 / items / 4 );
                    int y = j * ( 1000 / items ) + ( 1000 / items / 4 );

                    gc.setAntialias( (int) ( Math.random() * 2 ) );

                    Color bg;

                    if ( singleColor ) {
                        bg = colorA;
                    } else {
                        if ( ( i + j ) % 2 == 1 ) {
                            bg = colorA;
                        } else {
                            bg = colorB;
                        }
                    }

                    gc.setBackground( bg );
                    gc.fillRectangle( x, y, 1000 / items / 2, 1000 / items / 2 );
                }
            }

            ImageLoader imageLoader = new ImageLoader();
            imageLoader.data = new ImageData[] { image.getImageData() };
            imageLoader.save( "C:\\img\\" + name + ".png", SWT.IMAGE_PNG ); //$NON-NLS-1$ //$NON-NLS-2$

            gc.dispose();
            image.dispose();
            display.dispose();

            colorA.dispose();

            if ( colorB != null ) {
                colorB.dispose();
            }
        }
    }