首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的控制器如何更新其他控制器的作用域变量?

我的控制器如何更新其他控制器的作用域变量?
EN

Stack Overflow用户
提问于 2015-08-06 06:08:08
回答 1查看 49关注 0票数 0

我已经写了一个代码,我想要一个服务,返回承诺。现在,我在两个控制器中注入了这个服务,这些控制器不是视图中继承的作用域,但是当我更新控制器1中的模型值时,更新后的值会反映在控制器2中。为什么呢?

请按照下面的代码,

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en" ng-app="MyApp">
<head>
    <title>Recipe 02 example 01</title>
    <script type="text/javascript" src="D:\Rahul Shivsharan\JavaScript-Framework\AngularJS\angular.js"></script>
    <script type="text/javascript" src="D:\Rahul Shivsharan\JavaScript-Framework\jQuery\jquery-1.11.1.js"></script>
    <script type="text/javascript" src="D:\Rahul Shivsharan\JavaScript-Framework\BootstrapCSS\bootstrap-3.2.0-dist\js\bootstrap.js"></script>
    <link rel="stylesheet" href="D:\Rahul Shivsharan\JavaScript-Framework\BootstrapCSS\bootstrap-3.2.0-dist\css\bootstrap.css"></link>
    <link rel="stylesheet" href="D:\Rahul Shivsharan\JavaScript-Framework\BootstrapCSS\bootstrap-3.2.0-dist\css\bootstrap-theme.css"></link>
    <script type="text/javaScript">
        angular.module("MyApp",[]);
        (function(){
            angular.module("MyApp").controller("myCtrlOne",myCtrlOne)
                                   .controller("myCtrlTwo",myCtrlTwo);

            function myCtrlOne(storedValue){
                var obj = this;                 
                obj.myVal = undefined;

                storedValue.get().then(function(value){
                    obj.myVal = value;
                });

            };

            function myCtrlTwo(storedValue){
                var obj = this;
                obj.myVal = undefined;

                storedValue.get().then(function(value){
                    obj.myVal = value;
                });
            };


        })();

        (function(){
            angular.module("MyApp").factory("storedValue",storedValue);

            function storedValue($q){
                var obj = { get : fn },
                    promise = undefined;

                return obj;

                function fn(){
                    return promise || getData();

                    function getData(){
                        promise = $q.when({
                            label : 'Hello',
                            value : 1000
                        });

                        return promise;
                    };
                };
            }
        })();
    </script>
</head>
<body>
    <div ng-controller="myCtrlOne as one">
        <h2>One</h2>
        <label for="">Stored Value:</label>{{one.myVal | json}} <br/>
        Value: <input  type='text' ng-model='one.myVal.value' />
    </div>



    <div ng-controller="myCtrlTwo as two">
        <h2>Two</h2>
        <label for="">Stored Value:</label>{{two.myVal | json}} <br/>
    </div>
</body>     

请参阅下面的jsfiddle链接

我的角质承诺

我很困惑。

请引导我

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-06 06:12:27

答案是,您正在缓存工厂的结果。

您可以看到缓存的使用情况如下:

代码语言:javascript
复制
 return promise || getData();

每一次注入,工厂都会运行,但会返回缓存的承诺。

由于这是一个对象,两个控制器都将指向同一个对象。

在你的小提琴上加了一个指纹。打开控制台,查看“获取数据”只打印一次。

http://jsfiddle.net/3hb0acdk/

代码语言:javascript
复制
function getData(){
    console.log('getting data');
    promise = $q.when({
    label : 'Hello',
    value : 1000
});

这里有一个小提琴,它将产生两个不同的对象,因此其中一个不会影响另一个

http://jsfiddle.net/d0queaat/

代码语言:javascript
复制
function fn(){
    return getData();

    function getData(){
        console.log('getting data');
        var promise = $q.when({
            label : 'Hello',
            value : 1000
        });

        return promise;
    };
};
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31847974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档