Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Angular中,在实例化任何控制器或指令之前,但在启动应用程序之后,是否有方法执行一些初始逻辑?_Javascript_Angularjs_Angular Ui Router_Restangular - Fatal编程技术网

Javascript 在Angular中,在实例化任何控制器或指令之前,但在启动应用程序之后,是否有方法执行一些初始逻辑?

Javascript 在Angular中,在实例化任何控制器或指令之前,但在启动应用程序之后,是否有方法执行一些初始逻辑?,javascript,angularjs,angular-ui-router,restangular,Javascript,Angularjs,Angular Ui Router,Restangular,我正在使用Restanglar和开发一个有角度的单页应用程序。现在我遇到了一个问题,我需要在实例化任何指令或控制器之前,以及在引导angular.bootstrap之后,调用一些初始服务器api来获取一些全局数据。我的应用程序是通过调用angular.bootstrap手动引导的,而不是使用ng app指令 更新: 谢谢@alp和@radim-köhler 我尝试了“resolve”和“run”两种方法,但它们似乎都可以解决我的问题。我已经用下面的代码试过了。我的要求是“hello world”

我正在使用Restanglar和开发一个有角度的单页应用程序。现在我遇到了一个问题,我需要在实例化任何指令或控制器之前,以及在引导angular.bootstrap之后,调用一些初始服务器api来获取一些全局数据。我的应用程序是通过调用angular.bootstrap手动引导的,而不是使用ng app指令

更新: 谢谢@alp和@radim-köhler

我尝试了“resolve”和“run”两种方法,但它们似乎都可以解决我的问题。我已经用下面的代码试过了。我的要求是“hello world”指令和“HomeCtrl”都可以被阻止或延迟实例化,直到解决了resolve1或resolve2,但现在测试结果是:

$stateProvider中指定的resolve2。仅限州的resolve对象 可以阻止HomeCtrl的实例化,hello world指令是 仍然可以在解析resolve2之前进行实例化。 解决方案1 在模块的“run”方法中,不能阻止它们中的任何一个HomeCtrl控制器 或者是hello world指令。 我也在

也许我需要将hello wrold指令和HomeCtrl包装到另一个控制器中,并为控制器声明抽象或正常状态,对吗

angular.module'app',['restangular','ui.router'] .指令'helloWorld',函数{ 日志“初始化hello-world指令”; 返回{ 限制:'E', 范围:{ 姓名:'@' }, 模板:“你好{{name}” } } .controller'HomeCtrl',函数$scope{ 控制台。记录“初始化主页”; $scope.content='这在HomeCtrl'中; } .configfunction$stateProvider,$urlRouterProvider{ $stateProvider.state'home'{ url:“/”, 控制器:“HomeCtrl”, 模板:“{content}}”, 决心:{ init:function$q{ 返回$Qfuncy解决,拒绝{ setTimeoutfunction{ console.log'Resolving2…';//resolve2 决定 }, 1000 * 3; }; } } }; $urlRouterProvider。否则为“/”; } .RunFunctionRestanglar,$q{ console.log“应用程序模块正在启动…”; //console.logrestanglar,$q; 返回$Qfuncy解决,拒绝{ setTimeoutfunction{ console.log'Resolving1…';//resolve1 决定 }, 1000 * 5; }; }; angular.elementdocument.readyfunction{ angular.bootstrapdocument,['app']; }; .身体{ 边缘顶部:10px; } 您应该检查状态定义的解析设置。这将是最好的地方,任何东西,这是需要执行的时候

配置应用程序后 在创建控制器之前 doc中的一些引用和片段:

您可以使用“解析”为控制器提供状态自定义的内容或数据。resolve是一个可选的依赖关系映射,应该将其注入控制器

如果这些依赖项中有任何一个是承诺,那么在实例化控制器并触发$stateChangeSuccess事件之前,它们将被解析并转换为一个值

示例:

如果以下解析中的每个对象是控制器实例化之前的承诺,则必须通过deferred.resolve解析它们。请注意每个resolve对象是如何作为参数注入控制器的

您应该检查状态定义的解析设置。这将是最好的地方,任何东西,这是需要执行的时候

配置应用程序后 在创建控制器之前 doc中的一些引用和片段:

您可以使用“解析”为控制器提供状态自定义的内容或数据。resolve是一个可选的依赖关系映射,应该将其注入控制器

如果这些依赖项中有任何一个是承诺,那么在实例化控制器并触发$stateChangeSuccess事件之前,它们将被解析并转换为一个值

示例:

如果以下解析中的每个对象是控制器实例化之前的承诺,则必须通过deferred.resolve解析它们。请注意每个resolve对象是如何作为参数注入控制器的

你可以用它来做那件事

例如:

var app = angular.module('myApp', ...);
app.run(function() {
    // your code
})
你可以用它来做那件事

例如:

var app = angular.module('myApp', ...);
app.run(function() {
    // your code
})

使用ui路由器创建超级状态

$stateProvider.state('app', {
    url: '',
    abstract:true,
    resolve: {
            init: function($q) {
                return $q(function(resolve, reject) {
                    setTimeout(function() {
                        console.log('Resolving ...'); // resolve
                        resolve();
                    }, 1000 * 3);
                });
            }
        },
    template: '<hello-world name="World"></hello-world><div ui-view=""></div>',


    })
     .state('app.home', {
        url: '/',
        controller: 'HomeCtrl',
        template: '<div class="body">{{content}}</div>',

    });

使用ui路由器创建超级状态

$stateProvider.state('app', {
    url: '',
    abstract:true,
    resolve: {
            init: function($q) {
                return $q(function(resolve, reject) {
                    setTimeout(function() {
                        console.log('Resolving ...'); // resolve
                        resolve();
                    }, 1000 * 3);
                });
            }
        },
    template: '<hello-world name="World"></hello-world><div ui-view=""></div>',


    })
     .state('app.home', {
        url: '/',
        controller: 'HomeCtrl',
        template: '<div class="body">{{content}}</div>',

    });

谢谢@micha。它起作用了。我不知道抽象状态的url可以设置为空字符串!谢谢@micha。它起作用了。我不知道抽象状态的url可以设置为空字符串!