Angular UI Router: decide child state template on the basis of parent resolved object

后端 未结 1 1551
小鲜肉
小鲜肉 2020-11-27 08:14

this is my app.js file- i have one parent state and two child states. Both the child views need the object.

    states.push({
      name: \'parentstate\',
           


        
相关标签:
1条回答
  • 2020-11-27 08:53

    There is a working example. Instead of templateUrl we should use the templateProvider. This is new state def:

      $stateProvider
        .state('parentstate.childs', {
          url: '/edit',
          views: {
            "view1@parentstate": {
              templateUrl: 'views.view1.html',
              controller: 'view1Ctrl',
            },
            "view2@parentstate": {
              templateProvider: function($http, $stateParams, OBJ) {
    
                var obj = OBJ.get($stateParams.objId);
                var templateName = obj.id == 1
                  ? "views.view2.html"
                  : "views.view2.second.html"
                  ;
            
                return $http
                      .get(templateName)
                      .then(function(tpl){
                        return tpl.data;
                      });
              },
              controller: 'view2Ctrl',
            }
          }
        });
    

    Why are we using this approach? as documented here:

    Templates

    TemplateUrl
    ... templateUrl can also be a function that returns a url. It takes one preset parameter, stateParams, which is NOT injected.

    TemplateProvider
    Or you can use a template provider function which can be injected, has access to locals, and must return template HTML, like this:

    Check the TemplateProvider based solution in this working plunker

    0 讨论(0)
提交回复
热议问题