Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $watch还是ng型号绑定问题?_Javascript_Angularjs - Fatal编程技术网

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
它们。