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

时间:2015-12-23 23:01:26

标签: angularjs angularjs-directive angularjs-scope angularjs-ng-repeat

我做了两个指令。为了在两个指令之间进行通信,我使用了一个工厂。 但它不能正常工作..我想删除我的文本当我按下删除按钮..我带工厂做我的任务但它不工作。我也尝试服务。也没有帮助

这是我的代码

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> 

2 个答案:

答案 0 :(得分:1)

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

如果要以这种方式传递数据,则必须永远不要用新对象替换vm.message(否则,控制器必须再次获取新对象)。

而不是data,请尝试data = {};

答案 1 :(得分:0)

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

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

此外,请注意ab都是真正的html标记,不确定是否存在标记<a href=""></a>的问题,