Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我的控制器如何更新其他控制器的范围变量?_Javascript_Angularjs - Fatal编程技术网

Javascript 我的控制器如何更新其他控制器的范围变量?

Javascript 我的控制器如何更新其他控制器的范围变量?,javascript,angularjs,Javascript,Angularjs,我已经写了一个代码,我想要一个返回承诺的服务。 现在我在两个控制器中注入了这个服务,这些控制器在视图中不是范围继承的,但在我更新控制器1中的模型值之后,更新后的值会反映在控制器2上。为什么 请按照下面的代码操作 <!DOCTYPE html> <html lang="en" ng-app="MyApp"> <head> <title>Recipe 02 example 01</title> <script type

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

请按照下面的代码操作

<!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>     

配方02示例01
angular.module(“MyApp”,[]);
(功能(){
角度模块(“MyApp”).控制器(“MyCtrone”,MyCtrone)
.控制员(“myCtrlTwo”,myCtrlTwo);
函数myCtrone(storedValue){
var obj=这个;
obj.myVal=未定义;
storedValue.get().then(函数(值){
obj.myVal=值;
});
};
函数myCtrlTwo(存储值){
var obj=这个;
obj.myVal=未定义;
storedValue.get().then(函数(值){
obj.myVal=值;
});
};
})();
(功能(){
角度。模块(“MyApp”)。工厂(“storedValue”,storedValue);
函数存储值($q){
var obj={get:fn},
承诺=未定义;
返回obj;
函数fn(){
返回承诺| | getData();
函数getData(){
承诺=$q.when({
标签:“你好”,
价值:1000
});
回报承诺;
};
};
}
})();
一个
存储值:{one.myVal | json}}
价值: 两个 存储值:{{two.myVal | json}}

请参考下面的JSFIDLE链接

我很困惑


请告诉我答案是你正在缓存工厂的结果

您可以在以下行中看到缓存的使用情况:

 return promise || getData();
工厂将在每次注入时运行,但将返回缓存的承诺

因为这是一个对象,所以两个控制器将指向同一个对象

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

这是一把小提琴,它将产生两个不同的物体,因此一个不会影响另一个


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

您可以在以下行中看到缓存的使用情况:

 return promise || getData();
工厂将在每次注入时运行,但将返回缓存的承诺

因为这是一个对象,所以两个控制器将指向同一个对象

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

这是一把小提琴,它将产生两个不同的物体,因此一个不会影响另一个


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

您可以在以下行中看到缓存的使用情况:

 return promise || getData();
工厂将在每次注入时运行,但将返回缓存的承诺

因为这是一个对象,所以两个控制器将指向同一个对象

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

这是一把小提琴,它将产生两个不同的物体,因此一个不会影响另一个


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

您可以在以下行中看到缓存的使用情况:

 return promise || getData();
工厂将在每次注入时运行,但将返回缓存的承诺

因为这是一个对象,所以两个控制器将指向同一个对象

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

这是一把小提琴,它将产生两个不同的物体,因此一个不会影响另一个



这就是服务的目的。。对于在控制器之间共享相同的数据,相同的服务位于两个控制器内部,并且没有对服务的输入,这意味着服务是独立于输入的,因此很明显,两者都将返回相同的数据。这就是服务的用途。。对于在控制器之间共享相同的数据,相同的服务位于两个控制器内部,并且没有对服务的输入,这意味着服务是独立于输入的,因此很明显,两者都将返回相同的数据。这就是服务的用途。。对于在控制器之间共享相同的数据,相同的服务位于两个控制器内部,并且没有对服务的输入,这意味着服务是独立于输入的,因此很明显,两者都将返回相同的数据。这就是服务的用途。。对于在控制器之间共享相同的数据,同一服务位于两个控制器内部,并且没有服务的输入,这意味着服务是独立于输入的,因此很明显,两者都将返回相同的数据。但是我没有在服务返回的对象中添加任何setter方法,那么,值是如何在服务中更新的呢?@RahulShivsharan-指针就是这样工作的。。只有一个物体——每个人都在看同一个。没有“服务对象”和“控制器对象”。。它是同一个对象。@RahulShivsharan如果要生成多个对象,我认为应该使用提供程序。我不确定。请参见:您也可以使用工厂生成多个对象。此外,JS是按值传递的。@skubski-对象是按引用传递的。引用是按值传递的:但我没有在服务返回的对象中添加任何setter方法,那么值是如何在服务中得到更新的呢?@RahulShivsharan-指针就是这样工作的。。只有一个物体——每个人都在看同一个。没有“服务对象”和“控制器对象”。。它是同一个对象。@RahulShivsharan,如果要生成多个