Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
AngularJS:在RouteProvider中解决-检测成功/失败?_Angularjs_Angularjs Routing - Fatal编程技术网

AngularJS:在RouteProvider中解决-检测成功/失败?

AngularJS:在RouteProvider中解决-检测成功/失败?,angularjs,angularjs-routing,Angularjs,Angularjs Routing,我已经下定决心在我的routeprovider上工作,但我只是回报了承诺,所以我不知道它是成功还是失败。这就是我所拥有的 .when('/items', { templateUrl: 'views/items.html', controller: 'ItemsCtrl', resolve: { resolvedData: function(Restangular) { return Restangular.one('Items').

我已经下定决心在我的routeprovider上工作,但我只是回报了承诺,所以我不知道它是成功还是失败。这就是我所拥有的

.when('/items', {
    templateUrl: 'views/items.html',
    controller: 'ItemsCtrl',
    resolve: {
        resolvedData: function(Restangular) {
            return Restangular.one('Items').get();
        }
    }
})
现在这确实有效,但我如何检测成功或失败。我可以在resolve方法中输入这个,但是在成功和失败中我会返回什么呢。记住,我需要将项目注入控制器

.when('/items', {
    templateUrl: 'views/items.html',
    controller: 'ItemsCtrl',
    resolve: {
        resolvedData: function(Restangular) {
            Restangular.one('Items').get().then(function(data) {
                // success
            }, function() {
                // failure
            });
        }
    }
})
我确实在这里看到了一个例子,但我不知道这是否是我需要的,以及如何使用它

它似乎在回复一个手动承诺

resolve: {
    response: ['Warranty'
        '$q',
        function(Warranty, $q) {
            var dfd = $q.defer();
            Warranty.sendRequest().then(function(result) {
                dfd.resolve({
                    success: true,
                    result: result
                });
            }, function(error) {
                dfd.resolve({
                    success: false,
                    reason: error
                });
            });
            return dfd.promise;
        }
    ]
}

我真正想做的是在我的控制器中,将已解析的变量注入控制器,如果它失败,那么我还希望能够访问控制器中的故障,以便我可以向用户显示由于问题而无法渲染。

您只需返回
的返回值,然后
方法:

resolve: {
    resolvedData: function(Restangular){
        return Restangular.one('Items').get().then(function (data) {
            ...
            return successData; // resolvedData will be resolved with the successData
            }, function () {
            ...
            return failureData; // resolvedData will be resolved with the failureData
            });
    }
}
然后
方法:

此方法返回一个新的承诺,该承诺通过successCallback或errorCallback的返回值被解析或拒绝


如果resolve函数失败,您可能希望向用户显示相应的内容(如错误消息)。 最好让resolve函数返回一个承诺(不带
然后
),并使用内部事件
$routeChangeError

myApp.run(['$rootScope',function($rootScope) {
  $rootScope.$on('$routeChangeError', function() {
    // what you want to do if an error occurs 
    // ex: $rootScope.displayErrorMessage = true
  });
])


处理一般错误(如网络错误/服务器关闭等)也会更容易。

Ah这太好了,在我的控制器中,我如何确定我注入的值是成功还是失败??返回一个对象,例如{success:true,data:…}