5

angularJS 是否有任何东西可以基于 ng-controller 命名空间延迟加载外部 JS/CSS 文件?这样以下内容会将 com.myApp.SomeClass.js 和 com.myApp.SomeClass.css 附加到文档头吗?

<div ng-controller="com.myApp.SomeClass"></div>
4

3 回答 3

3

还没有,但它在 v1.0 之后的作品中。

您的应用程序大到需要它吗?我们有一些令人印象深刻的大型应用程序,但还没有遇到这种需求,因为控制器比编写没有角度的相同行为时要密集得多。

于 2012-04-05T21:32:48.540 回答
0

使用慢脚本怎么样?在 angularjs 上延迟加载真的很容易

示例: https ://github.com/flrngel/slowscript-angular-require-lazyload

慢脚本: https ://github.com/flrngel/slowscript

来自网站的核心代码

应用程序.js

app = angular.module("mainApp", ["ui.router"]).run(function($rootScope){
    $rootScope.$on('$viewContentLoaded',function(){
        slowscript.execute();
    });
});

app.config(function($stateProvider, $urlRouterProvider) {
    $stateProvider.state("sexy", {
        url: "/sexy",
        views: {
            "contents": {
                templateUrl: "/views/test.html",
                controller: "Sexy",
                reloadOnSearch: true
            }
        }
    });
});

app.controller("Sexy", function($scope) {
    slowscript.queue(function(){
        slowscript.$global.sexy($scope);
    });
});

test.html(角度视图模板)

<div ng-controller="Sexy">
    <input list="univ">
        <datalist id="univ">
            <option ng-repeat="univ in univs" value="{{univ.name}}"></option>
        </datalist>
    </input>
    <input type="submit"></input>
    <noscript src="test.js" type="text/slowscript"></noscript>
</div>

测试.js

require(['angular','slowscript'],function(angular,slowscript){
    slowscript.$global.sexy=(function($scope){
        console.log("tada~");
        $scope.univs = [{"idx": 1,"name": "asdf"}, {"idx": 2,"name": "bsdf"}];
        $scope.$apply();
    });
    slowscript.queue_execute();
});
于 2014-04-10T07:36:08.060 回答
0

使用股票 AngularJS 1.x 是不可能的

但是,您可以使用$oclazyload来延迟加载代码文件(js、HTML、CSS)

$ocLazyLoadUI-Router等路由器完美配合。它返回一个承诺并使用resolve属性来确保在解析视图之前加载文件。

angular.module('myApp', ['ui.router', 'oc.lazyLoad'])
     .config(function($stateProvider, $urlRouterProvider, $ocLazyLoadProvider) {
      $stateProvider
          .state('stateA', {
              url: '/stateA',
              controller: 'StateACtrl',
              templateUrl: 'stateA.html',
              resolve: {
                  load: [ '$ocLazyLoad', function($ocLazyLoad) {
                          return $ocLazyLoad.load([
                              {
                                  name: 'stateA',
                                  files: [
                                      'stateA.css',
                                      'stateA.js',
                                  ],
                              },
                          ]);
                      },
                  ],
              },
          })

          .state('stateB', {
              url: '/stateB',
              controller: 'StateBCtrl',
              templateUrl: 'stateB.html',
              resolve: {
                  load: [ '$ocLazyLoad', function($ocLazyLoad) {
                          return $ocLazyLoad.load([
                              {
                                  name: 'stateB',
                                  files: [
                                      'stateB.css',
                                      'stateB.js',
                                  ],
                              },
                          ]);
                      },
                  ],
              },
          });
  });

我还创建了一个plunkr来演示一个工作模型。

文档以了解有关可能的配置选项的更多信息。

希望能帮助到你!

于 2018-07-23T12:28:55.057 回答