Javascript 角度数据绑定不起作用

Javascript 角度数据绑定不起作用,javascript,angularjs,ionic-framework,ionic,Javascript,Angularjs,Ionic Framework,Ionic,我有一个表单,用户将在其中输入一个名称并单击Next。我想做的是,当用户单击下一步时,我想在toChat函数中提醒$scope.name的更新值,但会提醒初始值,即James。如何访问角函数中的更新值?我在理解AngularJs中的共享变量时遇到了一些严重的问题 js .controller('NewcontactCtrl', function($scope,$rootScope, $ionicHistory,$window) { $scope.name='James';

我有一个表单,用户将在其中输入一个名称并单击Next。我想做的是,当用户单击下一步时,我想在
toChat
函数中
提醒
$scope.name
的更新值,但会提醒初始值,即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>

取消
下一个

有人能帮忙吗?

我想你需要提醒类似于。。。
alert($scope.name)

添加到@Paul Fitzgerald,points中,请确保HTML DOM的顶部作用域中包含
ng controller=“NewcontactCtrl”

尝试添加服务,以便在作用域内共享数据

.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;
}]);
请参阅:

上述内容中最相关的部分:

作用域继承通常是直接的,您甚至不需要知道它正在发生。。。直到您尝试将双向数据绑定(即表单元素、ng模型)从子作用域内部绑定到父作用域上定义的基元(例如数字、字符串、布尔值)。它不像大多数人期望的那样工作。发生的情况是,子作用域获取自己的属性,该属性隐藏/隐藏同名的父属性。这不是AngularJS正在做的事情——这是JavaScript原型继承的工作方式。新的AngularJS开发人员通常没有意识到ng repeat、ng switch、ng view和ng include都会创建新的子作用域,因此当涉及到这些指令时,问题往往会出现

通过遵循“最佳实践”,可以很容易地避免原语的这个问题–观看3分钟。Misko演示了ng开关的基本绑定问题

在模型中使用“.”将确保原型继承发挥作用。所以,使用
而不是

我相信你有一个指令在那里的某个地方(可能是离子内容),它正在创建一个新的作用域,在这个作用域中,你的输入字段与你的下一个按钮所在的作用域相分离

为了模拟这种情况,我在下面的代码片段中使用了
ng repeat
(但我只重复了一次),这会导致拆分作用域的相同行为。如果使用未经此html修改的控制器代码,则会重现您遇到的问题

解决这个问题的办法是在绑定时“使用点(.)”。请注意,我已将名称包装在作用域上名为“data”的对象中,因此现在您将其称为
data.name
,而不仅仅是
name

(函数(){
"严格使用",;
angular.module('myApp',[])
.controller('NewcontactCtrl',函数($scope,$window){
$scope.repeaterTest=[1];
$scope.data={name:'James'};
$scope.toChat=函数(){
$window.alert($scope.data.name);
};
});
})();

下一个

这是一个角度模板。我仍然需要包括它吗?它仍然不能与
$scope.name
一起使用吗?例如,当您添加
$scope
否时,最初的问题是scope。通过这种方式,toChat函数获得初始值。那么您想做什么呢?如果用户添加了其他名称,您希望对此发出警报吗@Ozgenyes,当用户更改文本字段时,我想提醒它。让我们。对不起,我实际上使用了$scope,我更新了我的问题。这里的问题是不同的作用域是由angular创建的,单击按钮无法到达子作用域,但是当我更改texfield时,我仍然得到旧的初始值,即“James”。您的答案太棒了!谢谢,很乐意帮忙!当你有时间的时候,这篇参考文章是非常有用的全文。干杯