Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 控制器中未定义ng模型_Angularjs_Ionic Framework_Ionic - Fatal编程技术网

Angularjs 控制器中未定义ng模型

Angularjs 控制器中未定义ng模型,angularjs,ionic-framework,ionic,Angularjs,Ionic Framework,Ionic,我使用的是爱奥尼亚,我有以下观点: <ion-view hide-nav-bar="true" ng-controller="loginController" class="login-view"> <ion-content class="padding"> <div class="row row-center"> <div class="col"> <div id="logo"></d

我使用的是爱奥尼亚,我有以下观点:

<ion-view hide-nav-bar="true" ng-controller="loginController" class="login-view">
  <ion-content class="padding">

    <div class="row row-center">
      <div class="col">

        <div id="logo"></div>

        <form>
          <div class="list">
            <label class="item item-input">
              <input type="text" placeholder="Membership No" ng-model="membershipNo">
            </label>
            <label class="item item-input">
              <input type="password" placeholder="Password" ng-model="password">
            </label>
          </div>

          <button class="button button-block button-positive button-login" ng-click="login()">
            Login
          </button>
        </form>

      </div>
    </div>

  </ion-content>
</ion-view>
我不明白的是,当我点击按钮时,登录函数被正确调用。另外,如果在控制器中,我将
$scope.membershipNo
设置为类似“香蕉煎饼”的值,则视图实际上会更新


然而,当登录函数实际运行时,is说membershipNo和password是未定义的。我对Angular和Ionic比较陌生,所以我知道这可能是n00b的错误…

您需要在控制器中定义$scope变量,如下所示:

app.controller('loginController', ['$scope', '$localstorage',
    function($scope, $localstorage) {

        $scope.membershipNo;
        $scope.password;

        $scope.login = function () {
            console.log("User logged in with membership no: " + $scope.membershipNo +
    "\n and password: " + $scope.password);
        }

    }
]);
$scope.membershipNo = '';
$scope.password = '';
app.controller('loginController', ['$scope',
  function($scope) {
    $scope.data={};
  $scope.login = function () {
    console.log("User logged in with membership no: " + $scope.data.membershipNo +
    "\n and password: " + $scope.data.password);
  }

}]);
因此,您的控制器看起来像:

app.controller('loginController', ['$scope', '$localstorage',
  function($scope, $localstorage) {

  $scope.membershipNo = '';
  $scope.password = '';
  $scope.login = function () {
    console.log("User logged in with membership no: " + $scope.membershipNo +
    "\n and password: " + $scope.password);
  }

}]);

我最近遇到了完全相同的问题,这可能是一个解决方案:

修改后的报价:

“如果您使用ng模型,则必须在其中有一个点。”
使您的模型指向
对象.property
即可

控制器

$scope.formData = {};
$scope.login = function () {
  console.log("User logged in with membership no: " + $scope.formData.membershipNo +
  "\n and password: " + $scope.formData.password);
 }
模板

<input type="text" placeholder="Membership No" ng-model="formData.membershipNo">
<input type="password" placeholder="Password" ng-model="formData.password">


请检查此代码这是为我工作的:


登录
var-app=angular.module(“app”,[]);
app.controller('loginController',['$scope',
函数($scope,$localstorage){
$scope.membershipNo;
$scope.password;
$scope.login=函数(){
警报(“用户登录时的成员编号:+($scope.membershipNo | |“”)+
“\n和密码:”+($scope.password | |“”);
}
}]);

您正在绑定到一个基元。不要那样做。(本质上,
membershipNo
的值是通过值传递的,因此所更改的不是控制器中的引用。创建一个对象,类似于
$scope.user={}
并传递该
ng model=“user.membershipNo”
,否则Angular无法将数据发送回控制器…)可能是@DRobinson所说的重复。您可以通过使用controllerAs语法来避免这种情况,同时使您的代码更加优雅,并在这个过程中经得起未来的考验:-)@Rahil只有在
ngController
ngModel
之间没有创建新作用域时才有效。这是非常糟糕的做法。每次你都想在你的
ngModel
中加入“点”。总是。(它对Dean也不起作用,因为ionContent创建了一个示波器。)我小时候曾拥有一个电视示波器,但它从来都看不到很远。虽然站在我的房间里看起来很酷。我试过了,然后函数打印出的只是空白值,而不是用户输入的内容…?虽然这可以解决问题,但它并没有真正提供一个问题的答案。就像@DRobinson所说的和上面的示例所示,我获取了membershipNo和password并将它们包装在一个“credentials”对象中,现在一切都神奇地工作了。。但是为什么!?您能否添加一个解释,帮助“询问者”了解您所做的事情以及原因?这样我们都可以从ITI Ry8806中学习,这是一个典型的继承概念。正如@mbajur在他的例子中通过制作对象来制作的那样。angularjs使用的是javascript中的模式。如果代码中使用的继承人体系结构(如子作用域和父作用域之间的关系)得到了正确维护,那么这方面应该没有问题。否则,您将在angularjs中遇到这些类型的问题,即丢失范围属性值。但如果你能看到,我只是做了一个简单的控制器,那么它的工作正常。我不知道jean到底想做什么。但在他添加的代码片段中并没有问题。
app.controller('loginController', ['$scope',
  function($scope) {
    $scope.data={};
  $scope.login = function () {
    console.log("User logged in with membership no: " + $scope.data.membershipNo +
    "\n and password: " + $scope.data.password);
  }

}]);
       <ion-view ng-app="app" hide-nav-bar="true" ng-controller="loginController" class="login-view">
      <ion-content class="padding">

        <div class="row row-center">
          <div class="col">

            <div id="logo"></div>

            <form>
              <div class="list">
                <label class="item item-input">
                  <input type="text" placeholder="Membership No" ng-model="membershipNo">
                </label>
                <label class="item item-input">
                  <input type="password" placeholder="Password" ng-model="password">
                </label>
              </div>

              <button class="button button-block button-positive button-login" ng-click="login()">
                Login
              </button>
            </form>

          </div>
        </div>

      </ion-content>
    </ion-view> 


var app= angular.module("app",[]);
    app.controller('loginController', ['$scope', 
      function($scope, $localstorage) {

      $scope.membershipNo;
      $scope.password;
      $scope.login = function () {
        alert("User logged in with membership no: " + ($scope.membershipNo || '') +
        "\n and password: " + ($scope.password || ''));
      }

    }]);
$scope.user = {};
$scope.submitForm = function (isValid) {
   if (($scope.user.name || '').length > 0){ //Code }
}