1.用data对象存储变化的数据

js:

$scope.data={};
$scope.data.keywords = "";
$scope.search = function(){
$state.go("search",{keywords:$scope.data.keywords});
}

html:

<ion-view view-title="Home" hide-nav-bar="true">
<ion-header-bar class="bar-dark" align-title="center">
</ion-header-bar>
<ion-content ng-controller="homeCtrl">
<div class="item item-input-inset">
<label class="item-input-wrapper">
<input type="text" placeholder="搜索" ng-model="data.keywords">
</label>
<button class="button button-small ion-ios-search-strong" ng-click="search()">
</button>
</div>
</ion-content>
</ion-view>

2.把路由定义中的controller去掉,直接在模板文件中的ion-content上显示声明ng-controller="homeCtrl",这样之前的代码就能起作用。

双向数据绑定失效的原因:

首先,在ionic路由中定义了模板文件的controller后,ionic会在加载模板文件后,在模板文件的最顶级dom上(也就是ion-view)创建你的controller作用域$scope,然后由于ionic在我页面上的ion-content没有找到我显示声明的ng-controller,所以他会自动创建了一个匿名的作用域$scope2(这里我认为是ionic的内部机制会在ion-content上默认创建一层作用域,并没有真的研究过),那么因为我的controller中定义了keywords,实际上这里是$scope.keywords,但是页面上实际显示的其实是$scope2.keywords,这个值并没有定义,根据angular的作用域继承关系,$scope2.keywords= $scope.keywords,当我改变该值的时候,变化的是$scope2.keywords,但是这时候$scope.keywords这个值是并没有变化的。所以我在controller里面获取的$scope.keywords没有变化。

那么为什么按上面2种方法修改可以解决这个问题呢?
首先当我把keywords改成了data.keywords后,$scope2继承的就是是$scope的data对象,而熟悉js的同学都知道,修改$scope2.data对象中的引用则$scope.data也会改变,所以这种方法可以使2层作用域中的值同时改变,在controller中获取到的值就是界面上一样的值了。
第二种方法去掉了路由中定义的controller,直接写在模板中的ion-content上,这样模板文件加载进来后,就只有ion-content上的一层作用域了,双向数据绑定当然就起作用了。(如果ng-controller写在模板文件的ion-view上,依然是没用的,所以我猜想ionic是会自动在ion-content上创建作用域)

参考文献:https://link.zhihu.com/?target=https%3A//github.com/xufei/blog/issues/18

ionic 搜索双向数据绑定失效的更多相关文章

  1. ionic3 双向数据绑定失效 脏值检测失效

    最近在使用ionic3过程中,使用了eval()方法进行字符串拼接成一个function使用 在eval()方法中,只能使用局部变量,全局变量无法使用,ionic3的this在eval中失效(unde ...

  2. Vue中的双向数据绑定简单介绍

    1. 文本框绑定v-module <div id="app"> <input type="text" v-model="msg&qu ...

  3. Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定

    Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定 创建 angular 组件 https://github.com/angular/angular- ...

  4. 【vue2】Style和Class,条件,列表渲染,双向数据绑定,事件处理

    目录 1.style和class 2. 条件渲染 2.1 指令 2.2 案例 3. 列表渲染 3.1 v-for:放在标签上,可以循环显示多个此标签 3.2 v-for 循环数组,循环字符串,数字,对 ...

  5. vue双向数据绑定原理探究(附demo)

    昨天被导师叫去研究了一下vue的双向数据绑定原理...本来以为原理的东西都非常高深,没想到vue的双向绑定真的很好理解啊...自己动手写了一个. 传送门 双向绑定的思想 双向数据绑定的思想就是数据层与 ...

  6. 双向数据绑定(angular,vue)

    最近github上插件项目更新了关于双向数据绑定的实现方式,关于angular和vue. angular众所周知是使用的脏检查($dirty).一开始大家会认为angular开启了类似setInter ...

  7. jQuery.my – 实时的复杂的双向数据绑定

    jQuery.my 这个插件用于实时双向数据绑定.它发生变异给出的数据源对象,反映了用户与用户界面之间的相互作用.jQuery.my 提供了全面的验证,条件格式,复杂的依赖关系,运行形式结构操作. 马 ...

  8. Angular双向数据绑定MVVM以及基本模式分析

    MVVM: angular的MVVM实现的是双向数据绑定,模型从服务器端抓取到数据,将数据通过控制器(controller)传递到视图(view)显示,视图数据发生变化时同样也会影响到模型数据的变化, ...

  9. 《AngularJS权威教程》中关于指令双向数据绑定的理解

    在<AngularJS权威教程>中,自定义指令和DOM双向数据绑定有一个在线demo,网址:http://jsbin.com/IteNita/1/edit?html,js,output,具 ...

随机推荐

  1. centos 6.5 gdb 7.10安装make[5]: *** [install-bfdincludeHEADERS] Error 1解决

    make[5]: *** [install-bfdincludeHEADERS] Error 1make[5]: Leaving directory `/usr/local/gdb-7.10/bfd' ...

  2. SaaS教父:我眼中最糟糕的9条SaaS建议(转)

    文章摘要:美国SaaS行业的教父级人物Jason Lemkin近日总结了在他眼里最糟糕的9条SaaS方面的建议,希望对SaaS行业的创业者有所启发. SaaS行业的创业者平时肯定会收到外界各种各样的建 ...

  3. Python3.6.2在线安装pymysql模块

    我是一个python新手刚才使用python写邮件发送代码的时候想着需要连接数据库, 下面的安装步骤 python -m pip install pymysql PS C:\Users\hp> ...

  4. 桌面版Ubuntu系统固定IP设置和Network-manager设置

    我自己的学校是绑定MAC和IP上网的.这种方法名义上说是为了安全,不过是个搞计算机的都知道随便修改一下MAC就可以使用别人的IP了. 不提蛋疼的事情了,先来说说网络的配置吧 我用的是Ubuntu14. ...

  5. ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98) [30-Jan-2018 16:12:27] ERROR: FPM initialization failed解决方法

    1.php启动之后发现访问nginx出现502错误,检查nginx.conf发现指定的php socket不存在 2.解决方法nginx修改陈这样,直接把绿色部门的socket写成本地地址+端口就可以 ...

  6. 动态规划之97 Interleaving String

    题目链接:https://leetcode-cn.com/problems/interleaving-string/description/ 参考链接:https://blog.csdn.net/u0 ...

  7. 【MonkeyRunner环境搭建】

    一.配置MonkeyRunner环境变量 1.首先下载一个AndroidSDK,在SDK的目录中的tools文件夹中,直接带有MonkeyRunner 2.打开MonkeyRunner的方式: |-- ...

  8. Restful framework【第四篇】视图组件

    基本使用 -view的封装过程有空可以看一下 -ViewSetMixin # ViewSetMixin 写在前面,先找ViewSetMixin的as_view方法 # 用了ViewSetMixin , ...

  9. SpringBoot 使用Druid连接池

    1.pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  10. 解决Win10 Git图标不显示问题

    升级系统到win10 1803版本以后发现TortoiseGit的忽略图标不显示了 开始以为是版本问题,将TortoiseGit版本进行了升级还是不行 网上查找以后发现 Windows Explore ...