2013-05-01 94 views
2

我试图创建一个动态指令,将从属性接收他的绑定选项。 这是我的控制器观点:Angularjs双向绑定问题

<div ng-controller="OtCtrl"> 
    <div ng-include src="'/client/views/openTradeView.html'"></div> 
</div> 

我的观点:

<div> 
    {{name}} 
    <div swings binding="Risk" title="Risk"></div> 
    <div swings binding="Amount" title="Amount"></div> 
</div> 

这是我的指令查看:

<div> 
    {{title}} 
    <a href="javascript:void(0)" ng-click="minus()">-</a> 
    {{amount}} 
    <a href="javascript:void(0)" ng-click="plus()">+</a> 
</div> 

这是我的指令:

app.directive("swings", function() { 
return { 
    replace: true, 
    scope: { 
     title : '@title', 
     amount: '=binding', 
     extra: '=bindingExtra' 
    }, 
    resctrict: "A", 
    controller: function($scope){ 

     $scope.minus = function (event, binding) { 
      $scope.amount -= 1; 
      console.log(binding) 
     } 
     $scope.plus = function (event) { 
      $scope.amount += 1; 
     } 
    }, 
    templateUrl: '/client/views/swingsDirectiveView.html' 
} 
}); 

而且最后我的控制器:

app.controller("OtCtrl", ['$scope', function ($scope) { 
    $scope.Amount = 400; 
    $scope.Risk = 100; 

    setInterval(function(){ 
     console.log($scope.Risk) 
    },2000); 
}]); 

我知道当我使用ng-view时,angularjs会创建新的范围。我的问题是,当我单击加号或减号时,指令更新中的金额不是控制器中的风险模型,而是在第一个加载指令中采用风险初始值并设置金额。

我该如何解决这个问题。

感谢

+0

我不确定我理解你的问题。我用你的代码创建了一个Plunker,它似乎工作正常,但也许你可以重新提出你的问题。必须有一些我错过了。这是Plunk:http://plnkr.co/edit/9OXRGJ?p=preview – 2013-05-01 16:04:04

回答

1

我建议建立像这样在你的控制器model特性:通过

app.controller("OtCtrl", ['$scope', function($scope) { 
    $scope.model = { 
    Amount: 400, 
    Risk: 100 
    } 
}]); 

然后,将其绑定到你的指令:

<div swings binding="model.Risk" title="model.Risk"></div> 

什么是可能发生的事情是该范围继承正在创建AmountRisk的副本(因为它们是原始的)。而像这样创建对象会导致参考被复制,这意味着范围层次结构共享相同的数据。

+0

谢谢!它的工作 – Arnold 2013-05-01 19:06:03