ionic 这个坑有人踩过吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fszaer
V2EX    问与答

ionic 这个坑有人踩过吗

  •  
  •   fszaer 2015-07-28 22:43:25 +08:00 3069 次点击
    这是一个创建于 3777 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在ion-content标签下
    ng-model无法正常双向绑定
    例如
    页面中有一个

    <input ng-model="input">

    然后这时controller里
    log( $scope.input)结果却是undefined

    但是,如果在同一个页面其他地方
    显示{{input}}则可以正常根据input的值的改变而改变

    同样,如果在controller定义了
    $scope.input="no",页面input框里会显示no,但是当我修改其值为"yes"
    controller里log( $scope.input)结果是依然是no
    .....

    而且这个问题只在ion-content标签里面操作时会出现orz

    7 条回复    2015-07-29 22:55:08 +08:00
    horizon
        1
    horizon  
       2015-07-29 11:03:44 +08:00
    你可能需要$scope.apply()一下?我瞎说的。
    jerray
        2
    jerray  
       2015-07-29 12:10:44 +08:00
    要在某个回调里面访问 $scope.input 它才会是新的值的,比如 ng-click 或者 $timeout 之类的(实际上这里隐含着 $scope.$digest 的调用)。在controller里写的log函数只会在controller初始化的时候执行,打印的当然都是初始化时候的值了。
    fszaer
        3
    fszaer  
    OP
       2015-07-29 13:20:50 +08:00
    @jerray 我可能我忘了说
    在controller里写的log函数就是写在ng-cilck里触发的,所以并不初始值的问题
    我说的第二个例子就是表达这个意思

    初始值为no,修改值为yes,修改之后调用log()打印的依然是no

    另一个例子
    $scope.input初始值为1,设置一个ng-cilck函数在controller里让$scope.input++,并且打印出来

    可以看见页面的input框的值同步递增,但是一旦修改input框的值后,其值不在同步递增,而$scope.input的打印结果依然在增加,也就是它们之间的双向绑定显然是不正常的

    我不太搞得清楚这个问题具体是什么回事,
    不过我猜想是ion-content这个指令的某些设定破坏了双向绑定的正常运行
    jerray
        4
    jerray  
       2015-07-29 14:36:52 +08:00
    @fszaer 试了一下发现并没遇见这个问题。代码贴上来看看?
    fszaer
        5
    fszaer  
    OP
       2015-07-29 16:06:35 +08:00
    @jerray
    嗯,用的是官方sidemenu的初始项目
    其他一些关键改动在这了

    https://gist.github.com/Tk-archer/5cec769e6619ae1bff38
    在我本地的运行结果是
    value, undefined
    也就是
    $scope.textarea没有定义
    而视图中的textarea却可以作为参数传入到函数中,并且打印出来的
    jerray
        6
    jerray  
       2015-07-29 19:23:58 +08:00
    @fszaer 看了ionic的源码,ionContent基于你的controller创建了一个新的child scope,于是在ion-content对textarea属性赋值时,新的值绑定到了这个child scope上。
    之前看过一篇文章的建议是,把这种数据放在一个对象上,这样就可以通过原型链来访问到controller scope上的那个数据对象,这样用起来就没问题了。
    这其实是AngularJS的坑,先找一些best practices看吧。
    fszaer
        7
    fszaer  
    OP
       2015-07-29 22:55:08 +08:00
    @jerray
    惊了,原来是这样,感谢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2570 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 11:43 PVG 19:43 LAX 03:43 JFK 06:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86