ng-keyup 触发但在指令模板内与 ng-if 一起使用时无法正确读取
ng-keyup firing but not reading properly when used with an ng-if inside a directive template
我有一个指令,它在某种程度上工作得很好,当我输入一些东西时,指令中的 search()
作用域函数会触发并用输入文本设置 $scope.query
。
这是指令模板
<div class="container">
<div class="system-filter-header">
<div class="no-gutter">
<div class="system-search-wrapper search-wrapper-width">
<i ng-click="search($evt)" class="fa fa-search"></i>
<input type="text" ng-keyup=search($evt) class="search pull-left suggesstions-styles"
ng-model="query" ng-attr-placeholder="Search...">
</div>
</div>
</div>
</div>
这里是被触发的作用域函数
$scope.search = function() {
console.log($scope.query.length)
}
但是 当我在模板的第一行使用 ng-if="true"
时(true
仅用于泛化,我想在里面做一个不同的条件检查ng-if
) 这样,
<div class="container" ng-if="true">
search
仍然被触发,但 console.log
始终给出 0,并且它似乎没有更新 $scope.query
值,因为它保持为 $scope.query = ''
在整个打字过程中。
编辑
这是一个具有几乎相似行为的 example codepen。问题出在 searchBox
指令上,我已将 ng-if=true
添加到模板,但搜索不起作用。当我删除 ng-if
时,搜索工作正常。
有什么原因吗?
AngularJS 中的经验法则:your ng-model
should always include a dot. Otherwise AngularJS directives that create child scopes (like ng-if
or ng-repeat
) will create a duplicate property on that child scope instead of the parent scope. Following the controllerAs convention 完全缓解了这种行为。
我有一个指令,它在某种程度上工作得很好,当我输入一些东西时,指令中的 search()
作用域函数会触发并用输入文本设置 $scope.query
。
这是指令模板
<div class="container">
<div class="system-filter-header">
<div class="no-gutter">
<div class="system-search-wrapper search-wrapper-width">
<i ng-click="search($evt)" class="fa fa-search"></i>
<input type="text" ng-keyup=search($evt) class="search pull-left suggesstions-styles"
ng-model="query" ng-attr-placeholder="Search...">
</div>
</div>
</div>
</div>
这里是被触发的作用域函数
$scope.search = function() {
console.log($scope.query.length)
}
但是 当我在模板的第一行使用 ng-if="true"
时(true
仅用于泛化,我想在里面做一个不同的条件检查ng-if
) 这样,
<div class="container" ng-if="true">
search
仍然被触发,但 console.log
始终给出 0,并且它似乎没有更新 $scope.query
值,因为它保持为 $scope.query = ''
在整个打字过程中。
编辑
这是一个具有几乎相似行为的 example codepen。问题出在 searchBox
指令上,我已将 ng-if=true
添加到模板,但搜索不起作用。当我删除 ng-if
时,搜索工作正常。
有什么原因吗?
AngularJS 中的经验法则:your ng-model
should always include a dot. Otherwise AngularJS directives that create child scopes (like ng-if
or ng-repeat
) will create a duplicate property on that child scope instead of the parent scope. Following the controllerAs convention 完全缓解了这种行为。