Simple Angular $routeProvider resolve test. What is wrong with this code?
10,243
The problem is that you have ng-controller="ResolveCtrl"
on your body tag in index.html when also in your $routeProvider you specify the same controller for rt.html. Take out the controller definition from your body tag and just let the $routeProvider take care of it. It works great after that.
Author by
Hilo
Updated on June 11, 2022Comments
-
Hilo about 2 years
I have created a simple Angular JS $routeProvider resolve test application. It gives the following error:
Error: Unknown provider: dataProvider <- data
I would appreciate it if someone could identify where I have gone wrong.
index.html
<!DOCTYPE html> <html ng-app="ResolveTest"> <head> <title>Resolve Test</title> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.js"> </script> <script src="ResolveTest.js"></script> </head> <body ng-controller="ResolveCtrl"> <div ng-view></div> </body> </html>
ResolveTest.js
var rt = angular.module("ResolveTest",[]); rt.config(["$routeProvider",function($routeProvider) { $routeProvider.when("/",{ templateUrl: "rt.html", controller: "ResolveCtrl", resolve: { data: ["$q","$timeout",function($q,$timeout) { var deferred = $q.defer(); $timeout(function() { deferred.resolve("my data value"); },2000); return deferred.promise; }] } }); }]); rt.controller("ResolveCtrl",["$scope","data",function($scope,data) { console.log("data : " + data); $scope.data = data; }]);
rt.html
<span>{{data}}</span>
-
Hilo about 11 yearsrobbymurphy - you have no resolve nor injection of the result in your fiddle so you're not replicating the issue correctly.
-
Hilo about 11 yearsFrom the AngularJS $routeProvider doc for resolve: factory - {string|function}: If string then it is an alias for a service. Otherwise if function, then it is injected and the return value is treated as the dependency. If the result is a promise, it is resolved before its value is injected into the controller.
-
Hilo about 11 yearsIf resolve is a function that returns a promise, it is resolved then injected into the controller.
-
robbymurphy about 11 years@CM you're right, I was under the impression that you were arguing that you cannot have a controller specified in both the route and the markup.