AngularJS ng-model不存储值

时间:2013-11-05 16:31:24

标签: angularjs angularjs-directive

我的项目中有两个指令。它们允许使用用户定义的最小值和最大值来格式化数值,并且能够使用符号格式化,一个用于浮点数,一个用于整数。我已经创建了该指令的模拟模型(例如,我没有添加jGrowl,并且这些限制不适用于字段,仅适用于ng-model),但一次只存储其中一个值。从格式和视觉方面来看,我的项目中的功能是完美的。但我需要模型中的所有值来保留它们的值。

{ "varA": "1173", "varB": "153", "varC": "153", "varD": "000000153" }
not { "varC": "153.00" }  or { "varA": "1173.00" } etc...

我认为问题在于返回值与$ setViewValue();和$ render();但是我添加了更多的返回语句,问题仍然存在。

http://jsfiddle.net/yxRR8/2/

2 个答案:

答案 0 :(得分:0)

你的小提琴很长,所以我没有阅读所有内容,但我认为你的问题是你没有数据绑定到父范围。默认情况下,指令具有隔离范围。使用像

这样的东西
scope: {var: '='}

在你的指令定义中。

看到这个问题, What are the nuances of scope prototypal / prototypical inheritance in AngularJS? 特别是关于指令的部分。

答案 1 :(得分:0)

我能够通过将我的modelCtrl。$ parsers.push()包含在一个绑定到'keydown'事件的element.bind中来获取键值对。这阻止了指令循环并返回空值。

element.bind('keydown', function() {
    modelCtrl.$parsers.push(function(inputValue) {
        showAlert("Parse", 1);

        if (!prev) {
            prev = false;
            var returnVal = checkVal(inputValue, modelCtrl, "I", true, minVal, maxVal);

            if (String(returnVal) === ".") {
                setAndRender(modelCtrl, "");
                return "";
            }
            else {
                return returnVal;
            }
        }
        return String(inputValue).replace(/[^0-9 . -]/g, '');
    });
});