【问题标题】:App Doesn't Load When Controller is in Separate File当控制器在单独的文件中时应用程序不加载
【发布时间】:2016-11-04 09:26:38
【问题描述】:

这是对我的问题的补充:AngularJS Doesn't Resolve An Array of Objects

正如我在最后的编辑中所说:

我已经通过将控制器放在 app 所在的同一文件中解决了这个问题 已定义 - app.js。当放置在单独的文件夹中时,它不起作用。 我现在不知道为什么。

但这是为什么呢?我已经尝试了几次,当控制器位于单独的文件中时应用程序不会加载 - js/controller.js。而且我检查了路径,是正确的。

这是应用程序:

这是我的 HTML:

<body data-ng-app="App">
*
*
*

<div ng-controller="Ctrl">
     <p>{{obj.desc}}</p>
</div>

*
*
*
</body>

app.js

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

controller.js

app.controller('Ctrl', function($scope) {
    $scope.obj = [
          {
                intro: "intromessage",
                desc: "desc"
          },
          {
                intro: "intromessage2",
                desc: "desc"
          }
       ];
   });

【问题讨论】:

    标签: javascript jquery html angularjs angular-controller


    【解决方案1】:

    假设 controller.js 已正确加载。您需要在新文件中定义var app

    var app = angular.module('App'); //Continue your app module
    app.controller('Ctrl', function($scope) {
        $scope.obj = [
              {
                    intro: "intromessage",
                    desc: "desc"
              },
              {
                    intro: "intromessage2",
                    desc: "desc"
              }
           ];
       });
    

    【讨论】:

    • 其实不需要
    • 如果他在不同的范围内操作,那就是
    • @dbarthel 你所说的不同范围是什么意思?
    • 如果他在全局范围(全局变量)上操作,则不需要,他显然是在响应之后。通常最好不要在全局范围内操作并将您的角度代码包装到函数调用中以将它们分开。然后每个文件都有自己的范围,你需要定义你的模块 new
    • 请在此处阅读有关 var 作用域的信息 w3schools.com/js/js_scope.asp 它并不复杂,但比此处的简短评论有更好的资源可以理解;)
    【解决方案2】:

    你可以轻松解决这个问题。你必须对你的 js 文件做一些小的修改。

    app.js

    var app = angular.module('App', []);
    app.controller('Ctrl',homeController);
    

    controller.js

    var homeController = function($scope) {
    $scope.obj = [
          {
                intro: "intromessage",
                desc: "desc"
          },
          {
                intro: "intromessage2",
                desc: "desc"
          }
       ];
       }
    

    这对你有用。确保在您的布局页面中,在应用 js 之前包含控制器 js

    例子:

    <script src="~\controller.js"></script> <!--first-->
    <script src="~\App.js"></script> <!--second-->
    

    【讨论】:

    • 这个也不错!有时你必须这样去,有时你不需要。你能解释一下吗?
    • 它都与变量的范围有关。如果你定义
    • 抱歉评论不完整,这都是关于范围的。如果您在 app.js 中定义 app 变量并在 controller 中调用它,则 app 变量在此之前是未定义的。所以它不会注册。如果你想让你的原始代码本身工作,布局包括 app.js 先于 Controller 即使这样也能工作:) 尝试一次
    • 谢谢伙计,现在更清楚了。 Angular 真的很特别。 :)
    • 欢迎 tholo :) 是的,它是 :)
    猜你喜欢
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 2014-05-13
    相关资源
    最近更新 更多