我已经写了一个代码,我想要一个服务,返回承诺。现在,我在两个控制器中注入了这个服务,这些控制器不是视图中继承的作用域,但是当我更新控制器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>
请参阅下面的jsfiddle链接
我的角质承诺
我很困惑。
请引导我
发布于 2015-08-06 06:12:27
答案是,您正在缓存工厂的结果。
您可以看到缓存的使用情况如下:
return promise || getData();每一次注入,工厂都会运行,但会返回缓存的承诺。
由于这是一个对象,两个控制器都将指向同一个对象。
在你的小提琴上加了一个指纹。打开控制台,查看“获取数据”只打印一次。
http://jsfiddle.net/3hb0acdk/
function getData(){
console.log('getting data');
promise = $q.when({
label : 'Hello',
value : 1000
});这里有一个小提琴,它将产生两个不同的对象,因此其中一个不会影响另一个
http://jsfiddle.net/d0queaat/
function fn(){
return getData();
function getData(){
console.log('getting data');
var promise = $q.when({
label : 'Hello',
value : 1000
});
return promise;
};
};https://stackoverflow.com/questions/31847974
复制相似问题