当前位置: 首页 > 面试题库 >

在作用域中未定义简单的AngularJS形式

洪彬
2023-03-14
问题内容

我开始在jsfiddle中使用AngularJS表单,并且已经遇到了一个非常简单的表单示例无法按预期工作的问题。我所拥有的只是一个命名表单,由于某种原因,它没有在范围内显示(我期望有一个FormController实例)。

我设置了小提琴,下面是基本代码:

HTML

<div id="mainContainer" ng-app="angularTest" ng-controller="MainCtrl">
    <h1>The Form</h1>
    <form name="theForm">
        <input name="myName" type="text" ng-model="model.name" />
        <input name="submit" type="submit" />
    </form>
</div>

JS

var app = angular.module('angularTest', []);

app.controller('MainCtrl', ['$scope', function($scope) {
    $scope.model = { name: 'Model Name' };
    console.log($scope.theForm); //displays 'undefined'
}]);

我在jsfiddle上找不到很多简单的例子,所以我不确定这是否可能与类似的网站发生奇怪的交互(我发现的大多数例子都没有使用正式的控制器)。我也尝试在Plunker上进行检查,但是遇到相同的问题。

我确定我遗漏了一些非常明显的东西,但是在这里看不到其他许多要更改或调整的东西。任何帮助是极大的赞赏!


问题答案:

形式仅与自身注册$scope在控制器的
控制器已经最初运行。因此,console.log($scope.theForm)即使一切都正确设置,也会返回undefined。

在示例中,对的存在做出反应theForm,您可以设置观察器theForm以根据其存在来设置调试文本:

$scope.$watch('theForm', function(theForm) {
    if(theForm) { 
        $scope.formDebugText = 'Form in Scope';
    }
    else {
        $scope.formDebugText = 'Form is Undefined';
    }        
});

可以在http://jsfiddle.net/9k2Jk/1/上看到



 类似资料:
  • ...我已经设法在一个非常小的设置中重现了它(与相同问题上的类似问题相比),也注意到了一些奇怪的行为,这取决于是否使用了作用域。 以下代码起作用: 但是,当移除作用域并将放在全局作用域上时,它将失败: 更奇怪的是,如果文件被删除/重命名,那么无论作用域是否存在,代码都会成功。顺便说一句,无论是范围还是封装生成器的IIFE都没有区别。 最小的github repo在这里演示了这种行为。 我的问题是:

  • 问题内容: 我正在寻找访问指令中“父”范围的任何方式。范围,超越,要求,从上方传入变量(或范围本身)的任何组合,等等。我完全愿意向后弯腰,但我想避免某些完全不可靠或难以维护的事情。例如,我知道我现在可以通过从preLink参数中获取并对其范围进行迭代以找到概念上的“父级” 来做到这一点。 重要说明 是,该指令必须在同一父范围内可重用。因此,默认行为(作用域:false)对我不起作用。我需要为指令的

  • 问题内容: 我正在尝试使用拦截器的基本示例,因此我盯着一些代码但没有成功: 当启动索引页面时,控制台中出现错误消息: 任何想法? 谢谢 问题答案: 您的代码是完美的。您需要确保使用的是正确版本的angularjs。$ http.interceptors数组是在1.1.4版中添加的。 我为您的示例使用了angular 1.1.4做了一个小问题,请在此处查看http://plnkr.co/edit/c

  • 本文向大家介绍详解AngularJS中的作用域,包括了详解AngularJS中的作用域的使用技巧和注意事项,需要的朋友参考一下  范围扮演其视图连接控制器的角色一个特殊的JavaScript对象。范围包含了模型数据。在控制器,模型数据通过$scope对象访问。 以下是在上面的例子中需要考虑的重要问题。     $scope被作为第一个参数在其构造器确定指标到控制器。     $scope.mess

  • 问题内容: 我有以下代码: 我进入了Javascript控制台。我没有正确注入服务的依赖项吗? 问题答案: 您没有注射。应该如下。 这样声明可以确保在最小化JavaScript代码时正确识别服务。有关如何帮助缩小的更多信息,请参见关于缩小和为缩小声明AngularJS模块的说明 如果您的计划中没有缩小功能(例如进行快速测试),则只需