我有一个角度指令,类似于:
.directive('forexample', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elm, attrs, ctrl) {
elm.on('click', function() {
scope.$apply(function () {
ctrl.$setViewValue('value');
来自:
<button forexample ng-model="mymodel">Do It</button>
很明显
$scope.mymodel; // equals value
我想要的是推('价值');从指令到模型,所以最后点击“Do It”几次后,你会得到:
$scope.mymodel; // equals array('value,'value','value');
答案 0 :(得分:1)
鉴于$scope.mymodel
已定义为Array,则以下内容应该有效。
app.directive("forexample", function() {
return function( scope, elm, attrs ) {
elm.bind("click", function( evt ) {
scope.$apply(function( scope ) {
scope[ attrs.ngModel ].push('value');
});
});
};
});
答案 1 :(得分:1)
ngModel
控制器通常与输入类型指令一起使用,其中双向数据绑定显示其全部功率。但从你的例子来看,在你的情况下可能不需要ngModel
的完整机制。从功能上讲,您的示例并未解释您要执行的操作,因此我只是假设您希望将值推送到数组以响应单击事件。如果是这样,最简单的方法是在范围上使用$eval
方法:
.directive('forexample', function() {
return {
link: function(scope, elm, attrs, ctrl) {
var modelArray = scope.$eval(attrs.forexample);
elm.bind('click', function() {
scope.$apply(function () {
modelArray.push('value');
});
});
}
};
});
上述指令可以在如下模板中使用:
<button forexample="somearray">Do It</button>