相关疑难解决方法(0)

角度UI-Router中的延迟加载模板和控制器

我试图在我的UI-Router router.js文件中懒惰加载控制器和模板,但是我对模板有困难.

控制器正确加载,但在加载之后,我们必须加载模板,这就是出错的地方.

在ocLazyLoad加载控制器之后,我们解析了一个Angular promise,它也包含在templateProvider中.问题是在文件加载完成后返回promise(templateDeferred.promise),而promise作为对象返回.

.state('log_in', {
    url: '/log-in',
    controller: 'controllerJsFile',
    templateProvider: function($q, $http) { 
      var templateDeferred = $q.defer();

        lazyDeferred.promise.then(function(templateUrl) {
        $http.get(templateUrl)
        .success(function(data, status, headers, config) {
            templateDeferred.resolve(data);
        }).
        error(function(data, status, headers, config) {
            templateDeferred.resolve(data);
        });
  });
  return templateDeferred.promise;
 },
 resolve: {
    load: function($templateCache, $ocLazyLoad, $q) {
        lazyDeferred = $q.defer();

        var lazyLoader = $ocLazyLoad.load ({
          files: ['src/controllerJsFile']
        }).then(function() {
          return lazyDeferred.resolve('src/htmlTemplateFile');
        });
        return lazyLoader;
    }
 },
 data: {
  public: true
 }
})
Run Code Online (Sandbox Code Playgroud)

lazy-loading requirejs angularjs angular-ui-router

13
推荐指数
1
解决办法
2万
查看次数

Angular UI Router:根据父解析对象决定子状态模板

这是我的app.js文件 - 我有一个父状态和两个子状态.两个子视图都需要该对象.

    states.push({
      name: 'parentstate',
      url: '/parent/:objId',
      abstract: true,
      templateUrl: 'views/parentview.html',
      controller: function() {},
      resolve: {
        obj: function(OBJ, $stateParams) {
          return OBJ.get($stateParams.objId);
        }
      }
    });
Run Code Online (Sandbox Code Playgroud)

我想用这个解决的obj来决定子模板

    states.push({
      name: 'parentstate.childs',
      url: '/edit',
      views: {
        "view1@parentstate": {
          templateUrl: 'views/view1',
          controller: 'view1Ctrl'
        },
        "view2@parentstate": {
          templateUrl: function(obj) {
            if (obj.something == something) {
              return "views/view2first.html";
           } else {
              return 'views/view2second.html';
            }
          },
          controller: 'view2Ctrl'
        }
      }  
    });
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现这一目标?

javascript angularjs angular-ui-router

9
推荐指数
1
解决办法
4256
查看次数

尝试基于常量在控制器中动态设置templateUrl

我想根据我在angularjs bootstrap中定义的预设常量来更改与控制器关联的templateUrl.我无法弄清楚如何改变它.我已经尝试过UrlRouteProvider但是还没弄清楚如何从文件系统中拉出html.我被困在templateUrl上.

在下面的代码中,输出首先显示"svcc确实传递到第一个函数的console.out但是在templateUrl定义函数中,CONFIG是未定义的.

我愿意采取其他方式来做到这一点.

    var app = angular.module('svccApp', [
        'ui.router'
    ]);

    var myConstant = {};
    myConstant.codeCampType = "svcc";
    app.constant("CONFIG", myConstant);

    app.config(['$stateProvider', '$urlRouterProvider','CONFIG',
        function ($stateProvider, $urlRouterProvider,CONFIG) {
            console.log(CONFIG.codeCampType);
            $stateProvider
                .state('home', {
                    url: '/home',
                    //templateUrl: 'index5templateA.html',   (THIS WORKS)
                    templateUrl: function(CONFIG) {
                        console.log('in templateUrl ' + CONFIG.codeCampType);
                        if (CONFIG.codeCampType === "svcc") {
                            return 'index5templateA.html';
                        } else {
                            return 'index5templateB.html';
                        }
                    },
                    controller: function ($state) {
                    }
                });
        }]);
Run Code Online (Sandbox Code Playgroud)

angularjs angular-ui-router

6
推荐指数
1
解决办法
1万
查看次数

如何将服务注入AngularJS的UI-Router templateUrl函数?

我正在尝试让AngularJS的UI-Router选择已定义的状态(即"project"),如果没有匹配,则默认为"root"状态."root"状态应检查远程API(Firebase)并根据结果加载相应的视图.

以下示例未完成以下任一要求:

1)" http://website.com/project "与"root"状态匹配,而不是(先前定义的)"project"状态.

2)"fbutil"未在"templateUrl"函数中定义,并且无法注入.

请帮我解决这些问题.

angular.module('app')

.config(['$stateProvider', '$urlRouterProvider',
 function($stateProvider, $urlRouterProvider) {
    $stateProvider
        .state('project', {
            url: '/project',
            views: {
                'mainView': {
                    controller: 'ProjectCtrl as project',
                    templateUrl: '/views/project.html'
                }

            }
        })
        .state('root', {
            url: '/:id',
            views: {
                'mainView': {
                    templateUrl: function($stateParams, fbutil) {
                        var ref = fbutil.ref('user_data', id);
                        ref.once('value', function(dataSnapshot) {
                            return '/views/' + dataSnapshot.$val() +'.html';
                        }, function(error) {
                            return '/views/root.html';
                        });
                    }
                }
            }
        })
 }
]);
Run Code Online (Sandbox Code Playgroud)

javascript state angularjs firebase angular-ui-router

5
推荐指数
1
解决办法
2628
查看次数

是否可以通过Angular中的UI-Router的AJAX请求加载模板?

我知道这可能会得到一个答案,但是对于延迟加载实现本身来说更多.

所以,这是一个典型的UI-Router配置块:

app.config(function($stateProvider, $urlRouterProvider, $injector) {
    $stateProvider
        .state('home', {
            url: '/home',
            templateUrl: 'view_home.html',  // Actually SHOULD BE result of a XHR request ....
            controller: 'HomeCtrl'
        });
});
Run Code Online (Sandbox Code Playgroud)

但是,如果我想在templateUrl请求($stageChangeStart)时加载它,那将是基于AJAX请求的.

应该如何实施?LARGE角应用程序如何处理这个问题?

state angularjs angular-template angular-ui-router

2
推荐指数
1
解决办法
1176
查看次数