Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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 路由提供者解析角度_Javascript_Angularjs - Fatal编程技术网

Javascript 路由提供者解析角度

Javascript 路由提供者解析角度,javascript,angularjs,Javascript,Angularjs,这是我的密码: Js: HTML: 单击html中的按钮后,我的页面进入/tables/bricks,但什么也没有发生,因为resolve可能是错误的。我想要的-只有当$scope.bricks存在时,我才能转到/tables/bricks,因此只有当vm.bricks()被调用时。 感谢您提前回复 我认为您的问题是,vm.getbricks总是会返回一些东西(在成功或错误处理程序中),因此永远不会出错,并且您总是会调用Bricks()构造函数。在成功回调时尝试返回true,在错误回调时尝试

这是我的密码: Js:

HTML:


单击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>