我在以下代码中收到错误TypeError: Cannot read property '$setPristine' of undefined
,我尝试执行inputCtrl.inputForm.$setPristine();
inputForm.js
(function(){
var inputForm = angular.module('input-form', [ ]);
inputForm.directive('inputForm', function(){
return {
restrict: 'E',
templateUrl: 'input-form.html',
scope: {data: "="},
controllerAs: 'inputCtrl',
bindToController: true,
controller: ['$log', '$scope', function($log, $scope){
var inputCtrl = this;
inputCtrl.inputValues = millennialsDefault;
inputCtrl.emitData = function() {
inputCtrl.data = inputCtrl.inputValues.topic1Data;
$log.debug("Emitting '" +
inputCtrl.inputValues.topic1Name + "' to '" +
inputCtrl.inputValues.topic2Name + "'");
};
inputCtrl.swapInput = function(){
var swappedInputValues = {
topic1Name: inputCtrl.inputValues.topic2Name,
topic1Total: inputCtrl.inputValues.topic2Total,
topic1Data: inputCtrl.inputValues.topic2Data,
topic2Name: inputCtrl.inputValues.topic1Name,
topic2Total: inputCtrl.inputValues.topic1Total,
topic2Data: inputCtrl.inputValues.topic1Data,
};
inputCtrl.inputValues = swappedInputValues;
};
inputCtrl.clearInput = function(){
inputCtrl.inputValues =
{
topic1Name: "",
topic1Total: undefined,
topic1Data: "",
topic2Name: "",
topic2Total: undefined,
topic2Data: "",
};
inputCtrl.inputForm.$setPristine(); // TypeError: Cannot read property '$setPristine' of undefined
我做错了什么?
答案 0 :(得分:1)
显然,解决方案是将inputCtrl.inputForm.$setPristine();
更改为$scope.inputForm.$setPristine();
。
以下是一些参考资料:
如果您希望使用this
并避免引用$scope
,那么这可能是一个解决方案:http://www.technofattie.com/2014/07/01/using-angular-forms-with-controller-as-syntax.html
答案 1 :(得分:0)
检查在创建表单之前呈现页面的任何打开函数调用,这可能最终导致“$ setPristine未定义”
例如在你的控制器中
$scope.reset= function(form){
form.$setPristine();
};
$scope.reset();
如果有这样的东西,你可以看到错误, 在加载自身时,它将使用$ setPristine();