2

我正在尝试创建一个动态指令,该指令将从属性接收他的绑定选项。这是我的控制器视图:

<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 会创建新的范围。我的问题是,当我单击加号或减号时,指令中的金额会更新,但控制器中的风险模型不会更新,而是在第一次加载指令时采用风险初始值并设置金额。

我该如何解决这个问题。

谢谢

4

1 回答 1

1

我建议model在您的控制器中创建一个属性,如下所示:

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

然后,通过以下方式将其绑定到您的指令:

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

可能发生的是范围继承正在创建Amountand的副本Risk(因为它们是原语);而像这样创建对象会导致引用被复制,这意味着作用域层次结构共享相同的数据。

于 2013-05-01T15:54:13.937 回答