gpt4 book ai didi

javascript - 我的 Controller 如何更新其他 Controller 的范围变量?

转载 作者:行者123 更新时间:2023-11-28 19:05:07 26 4
gpt4 key购买 nike

我编写了一段代码,我想要一个返回 promise 的服务。现在我将这个服务注入(inject)到两个 Controller 中,这些 Controller 不是在 View 中继承的范围,但是一旦我更新了 Controller 1 中的模型值,更新后的值就会反射(reflect)在 Controller 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>

请引用下面的jsfiddle链接

My Angular-Promise

我很困惑。

请指导我

最佳答案

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

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

 return promise || getData();

工厂将在每次注入(inject)时运行,但会返回缓存的 Promise。

由于这是一个对象,因此两个 Controller 将指向同一个对象。

在你的 fiddle 中添加了一个打印。打开控制台可以看到“正在获取数据”只打印了一次。

http://jsfiddle.net/3hb0acdk/

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

这是一个 fiddle ,它将生成 2 个不同的对象,因此一个不会影响另一个

http://jsfiddle.net/d0queaat/

function fn(){
return getData();

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

return promise;
};
};

关于javascript - 我的 Controller 如何更新其他 Controller 的范围变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31847974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com