角度双向绑定未按预期工作

时间:2015-02-14 17:58:23

标签: javascript angularjs angularjs-directive

这是我的梦想。 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变量。

1 个答案:

答案 0 :(得分:0)

由于这个答案,我知道问题所在:

AngularJS - directive with ng-transclude, no two-way binding

使用原始值的双向双向投标不能按预期工作。

  

范围继承通常很简单,而且通常不会   甚至需要知道它正在发生......直到你尝试双向数据绑定   (即表格元素,ng-模型)到基元(例如,数字,字符串,   boolean)在子范围内从父范围定义。

所以我需要将value绑定从原始值更改为对象。