【问题标题】:Data binding in AngularJS app with routesAngularJS 应用程序中的数据绑定与路由
【发布时间】:2014-04-12 22:30:27
【问题描述】:

我正在使用 Ionic 启动一个新的 Phonegap 应用程序。它依赖于 Angular。

所以这里是视图:

<ion-view title="'Login'" left-buttons="leftButtons">
    <ion-content has-header="true">
        <input type="text" ng-model="new_name" placeholder="Name">
        {{new_name}}
        <input type="text" ng-model="new_text" placeholder="Message..." ng-keydown="addMessage($event)">
    </ion-content>
</ion-view>

控制器:

.controller('LoginCtrl', function($scope) {
        $scope.new_name = "ininame";

        $scope.addMessage = function(e) {
            console.log($scope);
            if (e.keyCode != 13) return;
            console.log({name: $scope.new_name, text: $scope.new_text});
        };
    })

还有配置:

.state('eventmenu.login', {
                url: "/login",
                views: {
                    'menuContent' :{
                        templateUrl: "templates/login.html",
                        controller: "LoginCtrl"
                    }
                }
            })

所以 {{new_name}} 在更改上述输入时会更新,但控制器中 $scope.new_name 的值仍然是“ininame”并且永远不会改变。触发该功能时,console.log显示是这样的。

请注意,如果我像这样使用 ng-controller = "LoginCtrl" 添加一个 div:

<ion-view title="'Login to Wallit'" left-buttons="leftButtons">
    <ion-content has-header="true">
        <div ng-controller="LoginCtrl">
        <div ng-repeat="msg in messages"><em>{{msg.name}}</em>: {{msg.text}}</div>
        <input type="text" ng-model="new_name" placeholder="Name">
        {{new_name}}
        <input type="text" ng-model="new_text" placeholder="Message..." ng-keydown="addMessage($event)">
        </div>
    </ion-content>
</ion-view>

完美运行。模块配置中控制器的绑定应该与常规控制器的工作方式相同!

困惑...感谢您的帮助!

【问题讨论】:

    标签: javascript angularjs data-binding cordova ionic-framework


    【解决方案1】:

    阅读:http://jimhoskins.com/2012/12/14/nested-scopes-in-angularjs.html

    本质上,您需要更好地了解嵌套作用域的工作原理。如果您将模型值封装在容器对象中,您遇到的问题应该会消失。

    ng-model="mycontainer.new_name"
    {{mycontainer.new_name}}
    $scope.mycontainer.new_name = 'ininame';
    

    【讨论】:

    • 谢谢!我绝对需要提高 Angular 技能^^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2013-10-26
    • 2018-12-14
    • 2016-07-09
    • 2016-11-23
    • 1970-01-01
    • 2015-12-08
    相关资源
    最近更新 更多