我发出两个指令。为了在两个指令之间进行通信,我使用了工厂.但它不能正常工作..我想在按下删除按钮时删除我的文本..我带工厂来完成我的任务,但它不起作用.我也尝试接受服务,也无济于事
这是我的代码
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>
控制器首次初始化后,data
和vm.message
引用同一对象,但是当您运行deletepro
时,data
引用一个新对象,但vm.message
仍然引用旧对象。
如果要以这种方式传递数据,则切勿将data
替换为新对象(否则,控制器将不得不再次获取新对象(。
与其data = {};
,不如尝试data.name = '';
看起来您期望它会更新,因为data
是共享引用。但是您将其重置为 {}
,这会破坏引用。相反,您需要修改它:
function deletepro(){
for(var prop in data){
delete data[prop];
}
}
另外,请记住a
和b
都是真正的html标签,不确定编写标准<a href=""></a>
是否有任何问题,