-2

我做两个指令的。对一个指令,我有删除 button.and第二个指令。现在我想删除的删除按钮值我得到一个对象值的形式共享服务,我尝试清空我的对象,但它是没有发生,为什么......?如果我做错了什么是做这个任务的最好方法?如何使用diectives从Angular中的对象中删除属性?

plunker 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(); 

     }).service('sharedService',function(){ 
     var vm =this 
     vm.data={}; 
     vm.sendData=sendData; 
     vm.deletepro=deletepro; 
     function deletepro(){ 
      vm.data={}; 
     } 
     function sendData(){ 
      var obj ={name:"pQr"}; 
      vm.data=obj; 
      return vm.data; 
     } 

     }) 
    </script> 
    </body> 

</html> 

我尝试删除这样的,但不能正常工作

vm.delete=function(){ 
      alert('--'); 
      sharedService.deletepro(); 
     } 

更新答案提供的不工作

更新plinker

http://plnkr.co/edit/Yenmira9J9XpjscQzRoX?p=preview

+0

'delete myObject.property'从'myObject'引用的对象中删除名为'property'的属性,但它看起来像你的问题可能是一个没有触发的回调。您是否曾尝试在每个回调中放置日志语句以查看什么是触发和按什么顺序。 –

+0

对不起,我正在使用角js ..请先看看猛击 – user944513

+0

负选民请试着回答这个问题..这是个好问题,我试了很多然后我问这个 – user944513

回答

1

您正在使用。服务的配方,它创建了一个构造函数,但是要使用什么.factory配方,它创建了一个单例。

.factory('sharedService', function() { 
    var data = {}; 

    function deletepro(){ 
     data = {}; 
    } 

    function sendData(){ 
     var obj = {name:"pQr"}; 
     data = obj; 
     return data; 
    } 

    return { 
     sendData: sendData, 
     deletepro: deletepro 
    }; 
}); 

这样,您的两个控制器都会加载共享服务的相同实例。

UPDATE

审查您在您的评论中提供的plnkr代码后,我在你的代码中发现了几个错误。

  • 你在你的控制器中的一个有一个错字,作为另一个答案(的pm代替vm
  • 你被分配的sharedService.sendData()vm.message的返回值所提到的,但这并没有绑定在两个值任何方式。

在第二种情况下,您所期望的价值vm.message当你在sharedService进行了更改的数据更新,但因为没有约束力的,这是没有发生。

要解决这个问题,我添加了一个链接功能,以您的指令,并用下面的代码来观看sharedService.getData和更新vm.message每当它改变:

scope.$watch(sharedService.getData, function(data) { 
    vm.message = data; 
} 

这里是一个工作版本:http://plnkr.co/edit/kd7aEgNdQnTuMlwcTeDE?p=preview

+0

请检查不工作http://plnkr.co/edit/Yenmira9J9XpjscQzRoX?p=​​preview – user944513

+0

请删除您的答案,以便其他人会回答 – user944513

+0

查看我的更新答案。我希望这回答了你的问题。 –

0

第一:您在第二条指令中出现错误,您声明controllerAs: 'vm',但在控制器中您有一个明确的范围变量名称:var pm = this;

删除属性,你不能尝试:

delete myObject[property]; 

其中属性是一个字符串。

快乐编码!

相关问题