基于角度组件的方法并在Router中使用resolve

kingdavid:

所以我正在使用基于组件的角度方法,可以说我有一个名为 <home></home>;

import template from  './home.html';
import controller from './home.controller.js';

angular.module('myApp')
   .directive('home', homeDirective);

let homeDirective = () => {
    return {
        restrict: 'E',
        template, 
        controller,
        controllerAs: 'vm',
        bindToController: true
    };
};

现在,我可以<home></home>在路由中使用该组件,如下所示:

angular.module('myApp')
    .config(($routeProvider) => {
        $routeProvider.when('/', {
            template: '<home></home>'
        })
    })

我真的很喜欢这种方法,但是使用“旧”方法时,我习惯于在routeconfig中使用“ resolve”来仅在解决了promise的情况下呈现组件:

angular.module('myApp')
    .config(($routeProvider) => {
        $routeProvider.when('/', {
            templateUrl: './home.html',
            controller: './home.controller.js',
            resolve: {
            message: function(messageService){
                return messageService.getMessage();
            }
        })
    })

如何在角度的基于组件的方法中使用resolve?aj

Tamas Hegedus:

关于此问题,存在一个封闭的问题:对指令的支持resolve选项

结论是,他们不希望异步加载任意指令,因为这会导致过多的闪烁。

好消息是,Angular 2在DI层以一种紧密结合的方式支持了这一点(以及更多),并且不会带来很多额外的复杂性。

在Angular 1.x中,您可以为指令分配一些信息,从中可以获取消息的位置,并在控制器中处理异步加载。这样,您也可以显示一些不错的加载程序屏幕。

angular.module('myApp')
    .config(($routeProvider) => {
        $routeProvider.when('/', {
            template: '<home my-datasource="feed1"></home>'
        }).when('/other', {
            template: '<home my-datasource="feed2"></home>'
        })
    })
    .factory('DataSources', (messageService) => {
        return {
            feed1: messageService.getMessage,
            feed2: messageService.getError
        };
    });

或者,如果您希望message始终来自同一来源,则可以刻录messageService.getMessage().then(...)到控制器中。

如果您不希望在承诺解决之前完全看到该指令,则可以引入一个范围变量,该变量最初设置为false,然后在解析时将其设置为true,例如:

app.controller('HomeController', ($scope, messageService) => {
   $scope.loaded = false;
   messageService.getMessage().then(message => {
       ...
       $scope.loaded = true;
   });
   ...
});

并隐藏指令,直到ng-if="loaded"在根元素处加载该指令为止是的,这是太多的用户代码,但是您至少可以控制所有内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在基于类的组件中使用React.forwardRef?

角度2:要在所有组件中使用的功能

如何匹配Vue-Router路由并在组件功能中使用它

在1.5角度组件中使用ControllerAs

在样式化组件中使用React Router的'active'状态

如何在角度组件中使用debounceTime?

如何在角度组件模板中使用Spread Operator

如何在角度组件中使用DecimalPipe?

什么时候在React中使用基于类的组件

角度-是否可以在子组件中使用内容投影?

React / Router / MemoryRouter-如何传递历史记录属性并在子组件中使用push()?

React Typescript如何发送道具并在子组件中使用

在Laravel / Vue.js组件中使用this。$ router

在基于django的webapp中使用角度表达式

在角度2中使用组件模板的内容

在角度组件中使用引导程序组件

在PHPUnit测试中使用Symfony Router组件生成URL

角度2:在Promise中使用组件的“ this”

在多个组件中使用之前等待加载角度响应

需要获取所有子组件实例的所有值并在其父方法中使用:ReactJS

如何在服务中使用 Angular Router 在组件之间导航?

如何将方法从一个组件传递到另一个组件并在 Vue.js 中使用它?

如何在子组件中使用角度动画

读取 Json 数据并在角度组件中使用它

添加状态并在反应组件函数中使用它们

如何在基于类的组件中使用`useSelector`?反应,Redux

如何公开 props 类型并在样式组件中使用它

从 nextjs Link 组件传递数据并在 getStaticProps 中使用它

如何在角度组件中使用 NGXS Select()