观察指令改变模型

时间:2015-09-01 11:00:24

标签: angularjs angularjs-directive angularjs-scope

您好我需要一些帮助我尝试创建一个指令,该指令监视输入字段的模型,如果该模型更改它应该检查特殊字符,如果它们在那里模型被解析并且它应该返回解析的值。

现在所有这一切都正常工作,输入字段的值发生了变化并且是正确的,但似乎只有在模型尚未解析时仍然会更改值。

我的Html

<input type="text" name="bestellnummer" ng-model="we.bestellnummer" required parse/>

和我的指令

.directive('parse', function ($timeout, Ls, $window) {

return {
    restrict: 'AE',
    require: 'ngModel',
    link: function (scope, element, attrs, ngModel) {
        scope.$watch(attrs.ngModel, function (Val) {
            //console.log(Val)
            if (Val != undefined) {
                if ((Val.toString()).indexOf('?') != -1 && (Val.toString()).indexOf('!') != -1) {
                    Val = Val.slice(0, -1);
                    scope.code = new Gs1Parser.Parse(Val);
                    //console.log(scope.code);
                    if (scope.code != undefined && scope.code[0].Key != 'invalid') {

                        var ParsedVal = scope.code[0].Key;
                        scope.code = undefined;                     
                        $window.Gs1Parser.returnedValue = [];
                        //try with ngModel
                        ngModel.$modelValue = ParsedVal;
                        //element[0].value = ParsedVal;
                       //scope.ab.abNr = ParsedVal;
                    } else if (scope.code[0].Key == 'invalid') {
                        Val = Val.slice(1);
                        //element[0].value = Val;
                        //scope.ab.abNr = Val;
                    }
                }
            }
        })                   
    }
}

})

所以基本上用户输入了?12345!解析器将此值更改为345,这应该是新模型。目前该值为345但是一旦我发送数据,就会发送modelvale(?12345!)。

先谢谢

1 个答案:

答案 0 :(得分:1)

只需更改范围值,例如:

  Bundle bundle=new Bundle();
bundle.putString("message", "From Activity");
  //set Fragmentclass Arguments
Fragmentclass fragobj=new Fragmentclass();
fragobj.setArguments(bundle);

(简单$parse(attrs.ngModel).assign(scope, Val); 不适用于&#39; model.value&#39;仅适用于简单的价值&#39;) 你应该小心,因为改变这个值会再次触发你的手表。