我正在使用像这样的输入骨架创建一个指令
<input type="hidden" data-ng-model="model['foo'][__index__]['bar']" data-ng-init="model['foo'][__index__]['bar'] = null" name="foo___index___bar">
每当触发一个动作时,我就会得到这个骨架,根据动作(主要是当前数组位置)替换__index__
一个整数,并将其附加到div中。
这很有效,它只是一个
element.append(newInput)
然后使用$compile(element)(scope)
我在新元素上加载角度。
问题是我必须为每个新创建的输入设置一个值,我尝试使用newInput.val(myVal)
,但它不起作用。在我的范围内,未设置新值。
我可以做scope.model['foo'][__index__]['bar'] = myVal
但我不能,因为代码应该可以重用于其他表单,输入名称会改变(这就是为什么它是一个指令)。
如何实现这一目标?
我的整个代码如下
<div data-index="0" data-prototype="<input type=\"hidden\" data-ng-model=\"model['foo'][__index__]['bar']\" data-ng-init=\"model['foo'][__index__]['bar'] = null\" name=\"foo___index___bar\">"></div>
JS
'use strict';
angular
.module('ngSkeleton')
.directive('ngSkeleton', function($log, $http, $compile) {
return {
restrict : 'AE',
require : '?ngModel',
scope : {
prototype: '@',
index: '@'
},
link: function(scope, element, attrs) {
myVal = "something_in_here";
scope.index = element.find(':input').length;
var newInput = angular.element(scope.prototype.replace(/__index__/ig, scope.index));
newInput.val(myVal);
element.append(newInput);
scope.index++;
$compile(element)(scope);
}
};
});