在angularjs中获取$ scope变量undefined

时间:2016-01-17 05:44:06

标签: angularjs

当我使用某个值初始化 $ scope.s 时,它正常工作。 但是当它没有按照下面所示的任何值进行初始化时,它会在控制台中产生错误 使用按钮

单击事件绑定时, $ scope.s undefined
 var mainApp = angular.module('mainApp', ['ngRoute']);
mainApp.controller('homeCtrl', ['$scope', '$http', function ($scope, $http) {


$scope.title = 'Home page';
$scope.s = '';
$scope.m = '';
$scope.subscribe = function () {


    console.log($scope.s); // undefined


}
}]);

<div data-ng-app="mainApp" data-ng-controller="homeCtrl">
<div>
    <h1>{{title}}</h1>
</div>
<div>
    <h3>Want to become a seller and earn more..?</h3>
    <p>Add your email and we will get in touch.</p>
    <div>
        <input type="email" data-ng-model="s" id="txtEmail" />
    </div>
    <div>
        <div>                
            <button data-ng-click="subscribe();">Send</button>
        </div>            
    </div>
</div>
<div>
    {{m}}
</div>

1 个答案:

答案 0 :(得分:3)

$scope.s变量未定义,因为您使用的是email类型的输入,其值为无效的电子邮件。

此“功能”似乎没有很好地记录,但input[email]的angular文档中的示例清楚地显示了相同的行为:input[email] @ docs.angularjs.org;在他们的示例中尝试有效且无效的电子邮件地址,您会看到与您目睹的行为相同的行为。

所以你的选择是:切换到text类型的输入或计划你的模型未定义,除非电子邮件有效。

这是angularjs的github中的问题,可以追溯到2012年,但行为相同:

  

Binding doesn't work with input type="email"