我有一个表单,用户将在其中输入名称,然后单击“下一步”。我想做的是,当用户单击“下一步”时,我想在alert
函数中$scope.name
更新的toChat
值,但是会警告初始值,即James。如何在角度函数中访问更新的值?我在理解AngularJs中的共享变量时遇到了一些严重的问题。
js
.controller('NewcontactCtrl', function($scope,$rootScope, $ionicHistory,$window) {
$scope.name='James';
$scope.myGoBack = function() {
$ionicHistory.goBack();
};
$scope.toChat = function() {
alert($scope.name);
};
})
html
<ion-view view-title="New contact">
<ion-nav-back-button>
</ion-nav-back-button>
<ion-nav-buttons side="primary">
<button class="button" ng-click="myGoBack()">
Cancel
</button>
</ion-nav-buttons>
<ion-nav-buttons side="secondary">
<button class="button" ng-click="toChat()" >
Next
</button>
</ion-nav-buttons>
<ion-content scroll="false" has-header="false" padding="true" >
<div class="list">
<label class="item item-input">
<input type="text" placeholder="Name" ng-model="name" />
</label>
<label class="item item-input">
<textarea placeholder="Notes" ng-model="notes" rows="10"></textarea>
</label>
</div>
</ion-content>
</ion-view>
有人可以帮忙吗?
最佳答案
请参阅:https://github.com/angular/angular.js/wiki/Understanding-Scopes
上面最相关的部分:
范围继承通常是简单明了的,并且您通常甚至不需要知道它正在发生...直到您尝试将2路数据绑定(即,表单元素,ng-model)绑定到基元(例如,数字,字符串,布尔值)从子作用域内部在父作用域上定义。它不能像大多数人期望的那样工作。发生的情况是子作用域获得了自己的属性,该属性隐藏/阴影了同名的父属性。 AngularJS并没有这样做-这就是JavaScript原型继承的工作方式。新的AngularJS开发人员通常不会意识到ng-repeat,ng-switch,ng-view和ng-include都会创建新的子范围,因此当涉及这些指令时,常常会出现问题。 ...
通过遵循always have a '.' in your ng-models的“最佳实践”,可以轻松避免原语出现此问题-观看3分钟。 Misko演示了ng-switch的原始绑定问题。
有一个 '。'在您的模型中,将确保原型继承在起作用。所以用
<input type="text" ng-model="someObj.prop1">
而不是
<input type="text" ng-model="prop1">
。
我相信您在某处(可能是离子含量)有一个指令,该指令在输入字段所在的位置创建一个新范围,并与“下一步”按钮所在的范围分开。
为了模拟这一点,我在下面的代码段中使用了ng-repeat
(但是我只重复了一次),这会导致分割范围的行为相同。如果要使用未经修改的html控制器代码,则会重现您遇到的问题。
解决此问题的方法是在绑定时“使用点(。)”。注意,我已经将名称包装在作用域上名为“ data”的对象中,因此现在您将其称为data.name
而不是name
。
(function() {
'use strict';
angular.module('myApp', [])
.controller('NewcontactCtrl', function($scope, $window) {
$scope.repeaterTest = [1];
$scope.data = {name: 'James'};
$scope.toChat = function() {
$window.alert($scope.data.name);
};
});
})();
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.28/angular.min.js"></script>
<div ng-app="myApp">
<div ng-controller="NewcontactCtrl">
<label ng-repeat="test in repeaterTest">
<input type="text" placeholder="Name" ng-model="data.name" />
</label>
<button class="button" ng-click="toChat()">
Next
</button>
</div>
</div>
关于javascript - Angular 数据绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30126743/