我有一个保存在Controller模型中的指令。它是一个“文本按钮”(根据要求),它只是一个只读文本框。每个“Line”和13个“Lines”有三个文本按钮。
我需要提取一个选择模式并根据点击的内容加载一些数据,以便可以进行新的选择。
虽然控制器上的模型已更改,但我不知道选择模式弹出时的更改内容。
型号:
$scope.Lines = {
"eg1": { one: '', two: '', three: '' },
"eg2": { one: '', two: '', three: '' },
"eg3": { one: '', two: '', three: '' },
"eg4": { one: '', two: '', three: '' },
... 9 more ...
};
指令:
.directive('textButton', function () {
return {
restrict: 'E',
require: 'ngModel',
link: function ($scope, elm, attrs, ctrl) {
elm.on('click', function () {
$scope.popModal(this); //<--I want the ng-model here!
});
},
template: '<input type="text" readonly="readonly" class="form-control" />'
};
});
查看:
<ul>
<li> <text-button ng-model="Lines.eg1.one"></text-button> </li>
<li> <text-button ng-model="Lines.eg1.two"></text-button> </li>
<li> <text-button ng-model="Lines.eg1.three"></text-button> </li>
<ul>
<ul>
<li> <text-button ng-model="Lines.eg2.one"></text-button> </li>
<li> <text-button ng-model="Lines.eg2.two"></text-button> </li>
<li> <text-button ng-model="Lines.eg2.three"></text-button> </li>
<ul>
... 11 more ...
我看过$ watch和$ scope.watch,但似乎没有什么能告诉我特定模型中的已经改变。
答案 0 :(得分:2)
最后,您需要隔离指令的范围,以便有机会到达每一行的ngModel
:
scope: {
ngModel: '@',
popModal: '='
}
然后你可以在你的回调中使用它:
elm.on('click', function () {
$scope.popModal($scope.ngModel); //<--you get the ng-model here!
});
但是,这意味着你也失去了对popModal()
的访问权限,我猜这是在控制器范围内定义的。要解决此问题,您需要将其作为第二个参数(我将其命名为pop-modal
):
<text-button ng-model="Lines.eg1.one" pop-modal="popModal"></text-button>
将所有内容捆绑在一起,here's a JSBin使用Angular 1.2(尽管你真的应该远离它)。
答案 1 :(得分:0)
如果您使用的是AngularJs 1.3+,则可以使用&#39; controllerAs&#39;在指令定义对象中。然后创建一个控制器来执行popModal。