角度数据绑定不起作用

时间:2015-05-08 14:50:18

标签: javascript angularjs ionic-framework ionic

我有一个表单,用户将在其中输入名称并单击“下一步”。我想要做的是,当用户单击“下一步”时,我希望在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);

     };
 })

有人可以帮忙吗?

4 个答案:

答案 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演示了原始绑定问题。

     

有一个&#39;。&#39;在你的模型中将确保原型继承发挥作用。所以,使用   <input type="text" ng-model="someObj.prop1">而非。{   <input type="text" ng-model="prop1">

我相信你在某处(可能是离子内容)有一个指令正在创建一个新的作用域,你的输入字段与你的Next按钮的作用域分开。

为了模拟这一点,我在下面的代码段中使用了ng-repeat(但我只重复了一次),这导致了分割范围的相同行为。如果您使用此html未修改您的控制器代码,则您将重现您遇到的问题。

解决这个问题的方法是使用点(。)&#39;绑定时。请注意,我已将名称包装在名为&#39; data&#39;的对象中。关于范围,现在您将其称为data.name,而不仅仅是name

&#13;
&#13;
(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;
&#13;
&#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;
}]);