EDIT:
私はこの問題を解決した - 変数は、フォーム送信関数の外に割り当てられていたため、2番目の例では、undefinedを返したことが理由でした。私は変数ことを推測してい
<form ng-submit="signup.submitRegistration()" id="signup-form" name="signup.signupForm" novalidate>
:submitRegistration機能は、私の形で提出フォームに呼び出された
(function() {
'use strict';
//signup controller definition
var SignupCtrl = function($http, $q, User, FormTools) {
var firstName = this.firstName,
lastName = this.lastName,
password = this.password,
form = this.signupForm;
function submitRegistration() {
//check if the form is valid
if(form.$valid) {
console.log("valid");
var user = {
firstName: firstName,
lastName: lastName,
password: password
};
User.createUser(user)
.then(function(response) {
console.log('user saved!');
}, function(err) {
console.error('error, user wasn\'t saved. reason: ' + err);
});
//if the form isn't valid at all
} else {
return false;
}
}
this.submitRegistration = submitRegistration;
};
angular
.module('signup', [])
.config(['$stateProvider', function($stateProvider) {
$stateProvider
.state('signup', {
url: '/signup',
//path relative to index.html
templateUrl: 'modules/signup/signup.html',
controllerAs: 'signup',
controller: 'SignupCtrl'
});
}])
.controller('SignupCtrl', [
'$http',
'$q',
'User',
'FormTools',
SignupCtrl
]);
})();
:完全なコンテキストでのIEは、ここで私は未定義なった場所の前に私の全体のファイルですフォーム(すなわち、this.firstName
、this.lastName
など)は、submit関数が呼び出されるまでundefined
でした。私は、変数を割り当てたところこの問題を解決するために、私はちょうどスワップ:
(function() {
'use strict';
//signup controller definition
var SignupCtrl = function($http, $q, User, FormTools) {
function submitRegistration() {
var firstName = this.firstName,
lastName = this.lastName,
password = this.password,
form = this.signupForm;
//check if the form is valid
if(form.$valid) {
console.log("valid");
var user = {
firstName: firstName,
lastName: lastName,
password: password
};
User.createUser(user)
.then(function(response) {
console.log('user saved!');
}, function(err) {
console.error('error, user wasn\'t saved. reason: ' + err);
});
//if the form isn't valid at all
} else {
return false;
}
}
this.cool = function() {
console.dir(this.signupForm);
};
this.submitRegistration = submitRegistration;
this.sayHello = User.sayHello;
};
angular
.module('signup', [])
.config(['$stateProvider', function($stateProvider) {
$stateProvider
.state('signup', {
url: '/signup',
//path relative to index.html
templateUrl: 'modules/signup/signup.html',
controllerAs: 'signup',
controller: 'SignupCtrl'
});
}])
.controller('SignupCtrl', [
'$http',
'$q',
'User',
'FormTools',
SignupCtrl
]);
})();
今変数はローカル関数スコープに移動したこと、それが動作します。私は、フォームが提出されるまで、コントローラがそれらの変数にアクセスすることはできないと推測していますが、それは間違っている可能性があります。
PS:コントローラの機能を.controller()
の外に定義するのはなぜかと思うのですが、例外が発生した場合、匿名のものではなくスタックトレースにデバッグするのが簡単です。
ありがとうございます!
は、割り当て時に依存します...完全なコンテキストを表示します。 'this.form'はビューがコンパイルされるまで定義されません – charlietfl
あなたの質問を編集するのではなく、解答として投稿してください。 – asgoth
そうです、それだけでした!ありがとう。 – Thomas