Javascript 路由提供者解析角度
这是我的密码: Js: HTML:Javascript 路由提供者解析角度,javascript,angularjs,Javascript,Angularjs,这是我的密码: Js: HTML: 单击html中的按钮后,我的页面进入/tables/bricks,但什么也没有发生,因为resolve可能是错误的。我想要的-只有当$scope.bricks存在时,我才能转到/tables/bricks,因此只有当vm.bricks()被调用时。 感谢您提前回复 我认为您的问题是,vm.getbricks总是会返回一些东西(在成功或错误处理程序中),因此永远不会出错,并且您总是会调用Bricks()构造函数。在成功回调时尝试返回true,在错误回调时尝试
单击html中的按钮后,我的页面进入/tables/bricks
,但什么也没有发生,因为resolve
可能是错误的。我想要的-只有当$scope.bricks
存在时,我才能转到/tables/bricks
,因此只有当vm.bricks()
被调用时。
感谢您提前回复 我认为您的问题是,
vm.getbricks
总是会返回一些东西(在成功或错误处理程序中),因此永远不会出错,并且您总是会调用Bricks()
构造函数。在成功回调时尝试返回true
,在错误回调时尝试返回false
。$scope
用于控制器,它在配置中无法到达。相反,您应该从服务返回一些内容,这些内容将在解析过程中调用。例如,if(YourService.getbricks())
解决方案:将逻辑从控制器移动到服务中。并确保返回可在配置中检查的值
app.service('BrickService',function(){
this.getbricks=函数(url){
return$http.get(url)//返回承诺
.然后(功能(响应){
return response.data;//返回数据
},函数(错误){
console.log(错误);
});
};
});代码>但我如何从HTML中调用此服务?@bafix2203你不能。控制器负责您的视图。因此,在那里呈现数据并调用函数。但是,即使您调用控制器的函数,它也可以执行服务方法。例如,$scope.foo=function(){YourService.bar()}
,其中foo()
通过ng click
或其他方式调用
angular.module('main', [])
.config(['$locationProvider', '$routeProvider',
function($locationProvider, $routeProvider) {
$routeProvider.when('/tables/bricks', {
controller: "myController",
resolve: {
"check" : function($location){
if(!$scope.bricks) {
$route.reload();
}
}
},
templateUrl: 'tables/bricks.html'
});
$routeProvider.otherwise({
redirectTo: '/tables/datatables'
});
}
])
.controller('myController', function($scope, $location, $http) {
var vm = this;
$scope.Bricks = function(){
$location.path('/tables/bricks');
};
vm.getbricks = function(n){
var url = n;
$http({
method: 'GET' ,
url: url,
})
.then(function successCallback(data) {
$scope.bricks = data.data;
console.log($scope.bricks);
}, function errorCallback(response) {
console.log(response);
console.log('error');
});
};
});
<button ng-click="vm.getbricks(n.bricks_url);Bricks();"></button>