Angular searchBar指令更改dom
Angular searchBar directive to change dom
我在这里定义了一个searchBar指令:
appControllers.directive('searchBar', [function () {
return {
controller: "searchCtrl"
};
}]);
添加到我的离子头栏中,如下所示:
...
<ion-nav-bar class="bar-balanced material-background-nav-bar">
<ion-nav-buttons side="left">
<a class="button button-icon button-clear ion-navicon" menu-toggle="left" ng-click="toggleLeft()"></a>
</ion-nav-buttons>
<ion-nav-buttons side="right">
<input type="text" search-bar ng-model="query" ng-change="collectQuery()"></input>
</ion-nav-buttons>
</ion-nav-bar>
...
这调用collectQuery()
很好,但不允许我引用query
。
#search-controller.js
appControllers.controller('searchCtrl', function($scope, $stateParams, $http, $q) {
...
$scope.collectQuery = function() {
cancel();
canceler = $q.defer();
clearTimeout(timeout);
console.log($scope.query);
timeout = setTimeout(function() {
search($scope.query);
}, 300);
};
var search = function(query) {
$scope.loading = true;
pendingRequest = $http({
method: 'GET',
timeout: canceler.promise,
url: 'https://website.com/api/' + query
}).then(function successCallback(response) {
$scope.hits = response.data.contacts;
window.data = response;
}, function errorCallback(response) {
console.log(response);
}).finally(function(){
$scope.loading = false;
});
return pendingRequest;
};
...
这总是将undefined
输出到控制台,并使用undefined
查询api。如果我强迫它用"test"查询api,请求会返回,但DOM不会改变:
<ion-view title="Search">
<ion-content id="mobile-contract-list-content"><!--search results section-->
<p>{{query}}</p>
<i class="fa fa-spinner fa-spin" ng-show="loading"></i>
<md-list class="ng-hide" ng-show="!loading">
<div class="search-item" ng-repeat="hit in hits">
<div class="row detail">
<i class="fa fa-{{ hit.category }}"></i>
<h5>
<a href="" target="_blank">{{ hit.search_term }}</a>
</h5>
</div>
</div>
</md-list>
</ion-content><!--end search results section-->
</ion-view>
我有什么东西不见了吗?我在这里完全被难住了。
最可能的原因是在搜索控制器中,您没有在任何位置定义$scope.query,因此当ng-model
更新时,它会在最近的可用父作用域上设置$scope.query。如果您尝试取出ng-show
,然后尝试它,那么ng-show
之上的下一个可用范围很可能是您的控制器。
如果是这种情况,这就是为什么人们不鼓励将ng模型绑定到基元值,它应该始终绑定到对象的属性。如果您使用controllerAs
或component
,这是很容易避免的,因为总是有一个关联的对象来放置属性。
然而,如果这不起作用,您可以尝试将ng-change="collectQuery()"
更改为ng-change="collectQuery(query)"
,因为更改函数的求值范围始终与ng-model
相同。至少到那时,您可以将其缩小到模型更新不正确还是范围问题。
相关文章:
- 向动态生成的DOM添加Angular自定义指令
- 在 ng-if 编译后访问指令中的 DOM 元素
- AngularJS操作父'指令中的DOM
- 我应该只在指令的链接 fn 中进行 DOM 操作吗?
- 在window.print()中加载为循环指令而编译时准备DOM失败
- AngularJS,引用指令中的其他DOM项
- Angular searchBar指令更改dom
- Angular指令删除只调用一次的DOM元素
- 访问ng repeat指令中的DOM
- 使用Angular Directive用$scope属性更新DOM-只要指令运行(无需等待事件)
- 如何在声明后运行DOM添加的指令
- DOM在指令中未就绪's链接功能.hacky Timeout是唯一的解决方案吗
- Angular2指令:如何检测DOM变化
- angularjs 子指令 DOM 加载速度不够快
- Angularjs 指令 DOM 不会更新
- 如何从另一个指令访问指令的 DOM 元素
- 为什么角度为在同一 DOM 元素上定义的指令定义“优先级”属性
- 脚本从指令添加到 dom 不触发
- 如何在角度指令中获取当前 dom 元素
- AngularJS - 将HTML元素添加到没有jQuery的指令中的dom