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.

Share:
10,243
Hilo
Author by

Hilo

Updated on June 11, 2022

Comments

  • Hilo
    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
    Hilo about 11 years
    robbymurphy - you have no resolve nor injection of the result in your fiddle so you're not replicating the issue correctly.
  • Hilo
    Hilo about 11 years
    From 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
    Hilo about 11 years
    If resolve is a function that returns a promise, it is resolved then injected into the controller.
  • robbymurphy
    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.