为什么工厂在指令之间不能正常工作?



我发出两个指令。为了在两个指令之间进行通信,我使用了工厂.但它不能正常工作..我想在按下删除按钮时删除我的文本..我带工厂来完成我的任务,但它不起作用.我也尝试接受服务,也无济于事

这是我的代码

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> 

控制器首次初始化后,datavm.message引用同一对象,但是当您运行deletepro时,data引用一个新对象,但vm.message仍然引用旧对象。

如果要以这种方式传递数据,则切勿将data替换为新对象(否则,控制器将不得不再次获取新对象(。

与其data = {};,不如尝试data.name = '';

看起来您期望它会更新,因为data是共享引用。但是您将其重置为 {} ,这会破坏引用。相反,您需要修改它:

function deletepro(){
    for(var prop in data){
       delete data[prop];
    }
}

另外,请记住ab都是真正的html标签,不确定编写标准<a href=""></a>是否有任何问题,

最新更新