郁闷!ionic中获取ng

网友投稿 177 2023-07-08


郁闷!ionic中获取ng

今天在ionic中使用ng-model时候,在对应的controller里面获得值为undefined。以前在使用angularjs的ng-model绑定时候就可以拿到的啊,这就尴尬了,决定一探究竟。大家先看下面的一个demo。

在学习angularjs的ng-model的数据双向绑定时候,我们通过以下的代码拿到对应的ng-model的值:

demo1

名字:

{{name}}

对应的js

通过打印$scope对象,看到其属性的确包含一个name的键值对。但是在在ionic项目的时候,我们同样是这样拿的:

demo2

&luDOcLYVxt;ion-view view-title="Chats">

名字:

{{name}}

在ionic对应的controller.js的对应的ChatsCtrl:

angular.module('starter.controllers', [])

.controller('ChatsCtrl', function($scope) {

$scope.show=function(){

console.log($scope.name);//控制台打印undefined

console.log(allPrpos($scope));

};

});

在打印的$scope属性里面并未发现name,控制台打印undefined,页面上{{name}}却可以正常输出来,这是为何呢?估计很多ionic初学者在做项目中都遇到过这个情况,是不是angularjs的数据双向绑定在ionic中失效了?假如我这样写:

demo3

名字:

{{name}}

在controlleuDOcLYVxr.js里面重新定义一个MyChatCtrl:

angular.module('starter.controllers', [])

.controller('MyChatCtrl', function($scope) {

$scope.show=function(){//点击button

console.log($scope.name);//控制台可以正常打印每次input输入框里面的值

console.log(allPrpos($scope));

};

});

这样大家应该就看出一些端倪了吧,其实一切问题的根源就是scope。当使用ng-model、ng-repeat等directive命令的时候,其本身会创建一个scope。其实,这涉及到ionic的controller创建时机问题,ionic视图路由里面创建的controller的scope的作用域要比下面的demo2中MyChatCtrl的scope的作用域要大;原来这两个scope是不同的,这也就解释了上面demo2为何拿到的值为undefind。发现问题了,如果解决这个问题呢?

scope作用域是可以继承的,js对象的属性也是继承的,所以我们可以稍微改下demo2,在刚才的ChatsCtrl先定义一个默认值:

var $scope.name={text:""};

在页面上input的ng-model:

名字:

{{name}}

经过做如此处理后,再点击button发现可以正常打印$scope.name的值。如果你不想用对象的属性这样来做,你有可以把绑定的时候绑定到其父作用域的scope里面,demo2的ctrl不变,页面上的代码改为如下:

名字:

{{name}}

这样同样可以拿到$scope.name的值,至此问题解决。ng-repeat等如果出现此问题,同样可以如此处理。大家如果有其他的解决方案,欢迎留言提出。

参考文章

ionic的ng-model无法获取值问题

深入理解angularjs的scope


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:浅析Java中线程的创建和启动
下一篇:比较Java数组和各种List的性能小结
相关文章

 发表评论

暂时没有评论,来抢沙发吧~