我见过以下内容:
angular.bootstrap(document, ['TodoApp']);
angular.bootstrap(angular.element("body")[0], ['TodoApp']);
Run Code Online (Sandbox Code Playgroud)
AngularJS文档也提到了我并不真正理解的内容.
angular.element(document).ready(function() {
angular.bootstrap(document);
});
Run Code Online (Sandbox Code Playgroud)
这些方法有什么区别吗?特别是Angular文档的最后一个方法是什么?一个比另一个更好用吗?
我真的需要在bootstrapping angular之前加载一些数据.出于这个原因,我创建了一个run块/在这个run块中我调用了一个服务上的方法,该服务从服务器加载一些数据.由于这是一个异步调用,JavaScript会进一步执行,这会导致我的应用程序中出现一些未定义的对象.
我正在使用路线,但不能选择使用该resolve物业.
有人能提供一个关于如何等待承诺在run块中准备好的解决方案吗?
编辑:
感谢给定的答案,我通过手动引导角度来解决它:
$(document).ready(function () {
$.ajax('/Data/GetDropdownData', {type:'POST'}).done(function (response) {
app.run(['ListService', function (ListService) {
ListService.setData(response);
}])
angular.bootstrap(document, ["sma"]);
})
})
Run Code Online (Sandbox Code Playgroud) 我在尝试使用异步数据初始化过滤器时遇到了麻烦.
过滤器非常简单,它需要将路径转换为name,但为此需要一个对应的数组,我需要从服务器获取.
在返回函数之前,我可以在过滤器定义中执行操作,但异步方面可以防止这种情况发生
angular.module('angularApp').
filter('pathToName', function(Service){
// Do some things here
return function(input){
return input+'!'
}
}
Run Code Online (Sandbox Code Playgroud)
使用承诺可能是可行的,但我对角度载荷的过滤方式没有任何清楚的了解.这篇文章解释了如何通过服务实现这样的魔力,但是有可能对过滤器做同样的事情吗?
如果有人对如何翻译这些路径有更好的了解,我会全力以赴.
编辑:
我尝试了承诺approch,但有些事情是不对的,我没看到:
angular.module('angularApp').filter('pathToName', function($q, Service){
var deferred = $q.defer();
var promise = deferred.promise;
Service.getCorresp().then(function(success){
deferred.resolve(success.data);
}, function(error){
deferred.reject();
});
return function(input){
return promise.then(
function(corresp){
if(corresp.hasOwnProperty(input))
return corresp[input];
else
return input;
}
)
};
});
Run Code Online (Sandbox Code Playgroud)
我对承诺并不是很满意,是否正确使用它们?
我的问题是我需要在调用控制器并呈现模板之前加载服务. http://jsfiddle.net/g75XQ/2/
HTML:
<div ng-app="app" ng-controller="root">
<h3>Do not render this before user has loaded</h3>
{{user}}
</div>
?
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
angular.module('app', []).
factory('user',function($timeout,$q){
var user = {};
$timeout(function(){//Simulate a request
user.name = "Jossi";
},1000);
return user;
}).
controller('root',function($scope,user){
alert("Do not alert before user has loaded");
$scope.user = user;
});
?
Run Code Online (Sandbox Code Playgroud)
我在AngularJS应用程序中执行任何控制器之前需要加载一些全局数据(即在AngularJS中全局解析依赖关系).
例如,我有一个UserService与getCurrentUser()它不以获取有关当前验证的用户数据到后端服务器的请求方法.我有一个控制器需要这些数据才能启动另一个请求(例如加载用户的余额).
我怎样才能做到这一点?
如何通过响应GET请求来初始化我的angularjs应用程序.
例如 :-
angular.module('A',[]);
angular.module('A').run( function ($rootScope,$http){
$rootScope.safeApply = function (fn) {
$http.get('url').success(function(result){
// This doesn't work. I am not able to inject 'theConstant' elsewhere in my application
angular.module('A').constant('theConstant', result);
});
var phase = $rootScope.$$phase;
if (phase === '$apply' || phase === '$digest') {
if (fn && (typeof (fn) === 'function')) {
fn();
}
} else {
this.$apply(fn);
}
};
});
Run Code Online (Sandbox Code Playgroud)
我希望在我的应用程序初始化时设置常量,并能够在我的组件之间共享常量.
实现这一目标的最佳方法是什么?
我正在使用Ionic编写PhoneGap/Cordova应用程序,并使用SQLite(使用ngCordova)进行持久存储.应用程序的核心是从SQLite数据库中检索的项目的滚动列表.
listController.js
.controller('ListCtrl', [
'$scope',
'dataFactory',
function($scope, dataFactory) {
var items = dataFactory.getAllItems().then(function(data){
$scope.allItems = data;
});
}
]);
Run Code Online (Sandbox Code Playgroud)
dataFactory.js
.factory('dataFactory', [function($window, $log, $q, $cordovaSQLite, dummyDataGenerator){
var db_;
// ...lots of SQLite fun in here
// cascading async callbacks to load the database and inject dummy data
var openDB_ = function(){...};
var createTable_ = function(){...};
// etc
var getAllItems = function(){
var q = $q.defer();
$cordovaSQLite.execute(db_, sqlSelectString, []).then(
function(results) {
$log.log("SQL SELECT successful");
var i, len, allItems = [];
for(i …Run Code Online (Sandbox Code Playgroud) 我正在研究angularJs和typescript项目.在启动客户端应用程序和加载UI之前,我必须进行同步http调用并从服务器获取一些数据.我在互联网上搜索,看到每个人都谈论承诺,huumm好吧为什么不呢.所以我在app.run()中使用promise(make $ http call并使用$ q来返回promise).也许我什么都没有,因为这根本不起作用.Angular启动app.config(),然后app.run(),...但Angular不会在启动app.run()之前等待app.config()完成.所以我的第一个承诺是在app.run()中启动,在它解决Angular尝试实例化控制器之前......我不想创建新的服务调用httpSynchronous,但我没有任何其他想法.
我刚开始学习Angularjs 2天前.所有这两天都有一个问题让我很困惑.
我需要向服务器发出一个http请求,以便在应用程序启动时获取一些数据,但我找不到合适的时机来执行此操作.
我试controller过去打电话$http.get().但它不起作用.似乎控制器不会被实例化,如果它从未在html中使用(不确定这一点).
我也试图找到其他方法,但我只发现$ http用于http请求.而且$http只出现在controller.
也许我需要使用其他Angularjs方法?或者,我应该手动执行实例化操作?
在定义AngularJS应用程序的路由时,为了指示每个路由应具有的访问级别,access已为每个路由添加了一个名为的新属性.这基于此处描述的客户端授权方法.
该.config块看起来如下所示:
app.config(['$routeProvider', '$locationProvider', '$httpProvider',
function ($routeProvider, $locationProvider, $httpProvider) {
var access = routingConfig.accessLevels; //Initialize with asynch data instead
$routeProvider.
when('/home', {
templateUrl: '/Templates/home.html',
controller: 'homeController',
access: access.user
});
$routeProvider.
when('/private', {
templateUrl: '/Templates/private.html',
controller: 'adminController',
access: access.admin
});
//...more route configurations
}]);
Run Code Online (Sandbox Code Playgroud)
抛开方法的核心逻辑,我只想知道如何access用一些异步数据初始化变量,以便在access为每个路由定义属性时可用它?这是必需的,因为只有服务器知道访问级别列表.
虽然初始化AngularJS服务的答案基于在promise服务中公开a 并resolve在路由配置中使用异步数据,但在我的情况下它不起作用,因为我需要在定义路由配置之前解析异步调用,因为access属性取决于关于异步数据.
我有什么选择?能否承诺/递延方法仍然以某种方式使用?
任何建议将不胜感激.
编辑:
为了描述access正在做什么,它被一个名为的单独模块填充routingConfig.在该方法中,用户可以属于某个角色,该角色被定义为二进制数.例如public:001,user:010,admin:100(等等).
任何路由的访问级别将再次是由允许访问它的所有用户角色的OR操作定义的二进制数.因此,例如,如果user …
我正在开发一个 Ionic 应用程序,屏幕上有带有复选框的列表和选择全部的选项。我是 AngularJS 和 Ionic 的新手。
在“全选”和其他列表所在的父元素中使用控制器时,“全选”工作正常。
我想将全选移动到子标题,以便在我们滚动时始终可以看到“全选”。
我试图在两个地方使用相同的控制器,但 Select All 不起作用,我只是读到范围被改变并且值不会被传递。
有没有办法通过更改或任何其他方式来解决这个问题?
数据将从服务中填充。
HTML
<ion-header-bar class="bar-light bar-subheader">
<div ng-controller="MainCtrl">
<ion-checkbox ng-model="selectAll" ng-click="checkAll()" >
<p>Select All</p>
</ion-checkbox>
</div>
</ion-header-bar>
<ion-content class="has-header">
<div class="list" ng-controller="MainCtrl">
<ion-checkbox ng-repeat="item in devList" ng-model="item.checked">
<div class="row">
<div class="col">
<p>{{ item.text }} - 99</p>
<p>{{ item.text }} - 99</p>
</div>
<div class="col right">
<p>{{ item.text }} - 99</p>
<p>{{ item.text }} - 99</p>
</div>
</div>
</ion-checkbox>
</div>
</ion-content>
Run Code Online (Sandbox Code Playgroud)
JS
.controller('MainCtrl', function($scope) {
$scope.devList = [ …Run Code Online (Sandbox Code Playgroud) 我正在开发一个角度应用程序,我正在使用一个服务,它应该在继续执行应用程序之前从服务器加载一些细节.
application.run(($myService)=>{
myService.loadSomething() //The application should pause until the execution of the Service
//is completed until this the browser shoudl stay in a "loading state"
});
Run Code Online (Sandbox Code Playgroud)
这样的事情甚至可能吗?
angularjs ×12
javascript ×8
asynchronous ×2
filter ×1
html ×1
promise ×1
sqlite ×1
sync ×1
synchronous ×1
typescript ×1
web ×1