我做了两个指令。为了在两个指令之间进行通信,我使用了一个工厂。 但它不能正常工作..我想删除我的文本当我按下删除按钮..我带工厂做我的任务但它不工作。我也尝试服务。也没有帮助
这是我的代码
http://plnkr.co/edit/Yenmira9J9XpjscQzRoX?p=preview
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
</head>
<body ng-app="app">
<a></a>
<b></b>
<script>
angular.module('app',[]).directive('a',function(){
return {
restrict :'E',
scope:{},
templateUrl:'a.html',
controller:'ts',
controllerAs:'vm'
}
}).controller('ts',function(sharedService){
var vm=this;
vm.delete=function(){
alert('--');
sharedService.deletepro();
}
}).directive('b',function(){
return {
restrict :'E',
scope:{},
templateUrl:'b.html',
controller:'bb',
controllerAs:'vm'
}
}).controller('bb',function(sharedService){
var pm=this;
pm.message= sharedService.sendData();
}).factory('sharedService', function() {
var data = {};
function deletepro(){
data = {};
}
function sendData(){
var obj = {name:"pQr"};
data = obj;
return data;
}
return {
sendData: sendData,
deletepro: deletepro
};
});
</script>
</body>
</html>
答案 0 :(得分:1)
首次初始化控制器后,data
和vm.message
会引用同一个对象,但是当您运行deletepro
时,data
会引用一个新对象,但{{1}仍然引用旧的。
如果要以这种方式传递数据,则必须永远不要用新对象替换vm.message
(否则,控制器必须再次获取新对象)。
而不是data
,请尝试data = {};
答案 1 :(得分:0)
看起来您期望它会更新,因为data
是共享引用。但是您将其重置为{}
,这会破坏参考。你需要修改它:
function deletepro(){
for(var prop in data){
delete data[prop];
}
}
此外,请注意a
和b
都是真正的html标记,不确定是否存在标记<a href=""></a>
的问题,