这是我的梦想。 value
绑定到范围变量(session_number),change是一个获取当前session_number并执行某些检查的函数。
return {
restrict: 'A',
scope: { value: '=value',change:'&change' },
template: '<a href="javascript:;" class="counter-minus" ng-click="minus()">-</a>\
<input type="text" class="counter-field" ng-model="value" ng-change="changed()" ng-readonly="readonly">\
<a href="javascript:;" class="counter-plus" ng-click="plus()">+</a>',
link: function( scope , element , attributes ) {
// Make sure the value attribute is not missing.
if ( angular.isUndefined(scope.value) ) {
throw "Missing the value attribute on the counter directive.";
}
var min = angular.isUndefined(attributes.min) ? null : parseInt(attributes.min);
var max = angular.isUndefined(attributes.max) ? null : parseInt(attributes.max);
var step = angular.isUndefined(attributes.step) ? 1 : parseInt(attributes.step);
element.addClass('counter-container');
// If the 'editable' attribute is set, we will make the field editable.
scope.readonly = angular.isUndefined(attributes.editable) ? true : false;
/**
* Sets the value as an integer.
*/
var setValue = function( val ) {
scope.value = parseInt( val );
scope.change();
}
setValue(scope.value + 1);
}
}
我想知道为什么scope.change()
在scope.value
之前执行。因为在change()
内,我使用了绑定到session_number
的{{1}},但始终scope.value
具有旧值。就像执行session_number
时一样,scope.change()
尚未更改session_number变量。
答案 0 :(得分:0)
由于这个答案,我知道问题所在:
AngularJS - directive with ng-transclude, no two-way binding
使用原始值的双向双向投标不能按预期工作。
范围继承通常很简单,而且通常不会 甚至需要知道它正在发生......直到你尝试双向数据绑定 (即表格元素,ng-模型)到基元(例如,数字,字符串, boolean)在子范围内从父范围定义。
所以我需要将value
绑定从原始值更改为对象。