我有一个表单,用户将在其中输入名称并单击“下一步”。我想要做的是,当用户单击“下一步”时,我希望在var intersects = raycaster.intersectObjects( arrayType1,true);
函数内alert
更新$scope.name
值,但会提醒初始值,即James。如何访问角度函数内的更新值?我在AngularJs中理解共享变量时遇到了一些严重的问题。
JS
toChat
HTML
.controller('NewcontactCtrl', function($scope,$rootScope, $ionicHistory,$window) {
$scope.name='James';
$scope.myGoBack = function() {
$ionicHistory.goBack();
};
$scope.toChat = function() {
alert($scope.name);
};
})
有人可以帮忙吗?
答案 0 :(得分:2)
请参阅:https://github.com/angular/angular.js/wiki/Understanding-Scopes
以上最相关的部分:
范围继承通常很简单,你甚至不需要知道它正在发生......直到你尝试双向数据绑定(即表格元素,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">
。
我相信你在某处(可能是离子内容)有一个指令正在创建一个新的作用域,你的输入字段与你的Next按钮的作用域分开。
为了模拟这一点,我在下面的代码段中使用了ng-repeat
(但我只重复了一次),这导致了分割范围的相同行为。如果您使用此html未修改您的控制器代码,则您将重现您遇到的问题。
解决这个问题的方法是使用点(。)&#39;绑定时。请注意,我已将名称包装在名为&#39; data&#39;的对象中。关于范围,现在您将其称为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);
};
});
})();
&#13;
<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>
&#13;
答案 1 :(得分:0)
我认为你需要提醒类似于......
alert($scope.name)
答案 2 :(得分:0)
除了@Paul Fitzgerald之外,还要确保{DOM}中的ng-controller="NewcontactCtrl"
包含在HTML DOM中。
答案 3 :(得分:0)
尝试添加服务以便在范围内共享数据
.controller('NewcontactCtrl', function($scope,$rootScope,sharedData $ionicHistory,$window) {
$scope.name=sharedData.Name ;
$scope.myGoBack = function() {
$ionicHistory.goBack();
};
$scope.toChat = function() {
alert(sharedData.Name);
};
});
app.factory('sharedData', [function () {
var self = {};
self.Name = "James";
return self;
}]);