Javascript $watch还是ng型号绑定问题?
我基本上有一组非常复杂的选项卡,带有各种输入控件,但现在不必担心这一点。现在让我们考虑一下简单的输入问题,我很困惑。 例如:Javascript $watch还是ng型号绑定问题?,javascript,angularjs,Javascript,Angularjs,我基本上有一组非常复杂的选项卡,带有各种输入控件,但现在不必担心这一点。现在让我们考虑一下简单的输入问题,我很困惑。 例如: <input type="text" placeholder="Associate some tags please" data-ng-model="tag" data-ng-maxlength="250"> $scope.checkSaveTag = function (tag) { ... // checked for duplicate
<input type="text" placeholder="Associate some tags please" data-ng-model="tag" data-ng-maxlength="250">
$scope.checkSaveTag = function (tag) {
...
// checked for duplicate tag beforehand
$scope.myForm.Tags.push(tagObj); // complicated form object
$scope.tag = ''; // tag input control
...
};
但我似乎没有得到任何回应。然而,当我执行保存操作时,我似乎总是得到用户输入的值
是因为ng model
未正确绑定,还是因为我没有$watch
正确绑定
此外,在执行保存操作后,我会尝试清除用户为标记键入的内容:
$scope.tag = '';
但由于某种原因,这似乎不起作用,好像$scope.tag
不存在
PS:当我说save operation时,我实际上是在执行一个数组。push()
到一个对象中,该对象后来被服务保存
例如:
<input type="text" placeholder="Associate some tags please" data-ng-model="tag" data-ng-maxlength="250">
$scope.checkSaveTag = function (tag) {
...
// checked for duplicate tag beforehand
$scope.myForm.Tags.push(tagObj); // complicated form object
$scope.tag = ''; // tag input control
...
};
标记是否可能是对象或数组?如果是这样的话,你需要做一个深度$watch,例如:
$scope.$watch('tag', function () {
console.log('tag changed');
}, true);
像这样试试
控制器
$scope.form={
tag:''
}
$scope.$watch("form.tag",function(newVal,oldVal){
console.log(newVal);
})
Html
<input type="text" placeholder="Associate some tags please" data-ng-model="form.tag" data-ng-maxlength="250">
乔恩·斯诺,你为什么死了(@JonShow我也试过了,但没有任何改变。似乎我无法从控制器内部读取我的模型$scope.tag
。非常奇怪。该标记可能被声明在子作用域上。尝试声明类似$scope.obj={}
并将ng模型设置为obj.tag
,然后改为观看obj.tag
。不客气,您可以参考了解为什么在ng模型中没有点可能是一个陷阱。我明白了,当我有一点空闲时间时,我肯定会对此进行更多研究。感谢您为我指明了正确的方向。看起来tag
与您的watch
和checkSaveTag
在不同的范围内,是吗?@DivyaMV似乎是这样。但我不太明白为什么会出现这种情况。所有内容都是在同一个控制器内定义的。输入是否在任何ng repeat或ng if内?请尝试使用ng model=myObj.tag
来代替标记y但@JonShow比你们早了一点。但你们两个都绝对正确。通过将我遇到问题的大量自由形式输入封装到作用域对象中,我能够$watch
它们。