AngularJS:在指令模板函数中返回一个promise

时间:2014-03-05 05:26:03

标签: javascript angularjs templates websocket angularjs-directive

正如标题所说,我想在指令模板函数中返回一个承诺,即:。

angular.module('someModule', [])
  //...
  .directive('someDirective', function() {
    return {
      //...
      restrict: 'E',
      template: function() {
        var deferred = $q.defer();

        //Some Async function which will call deferred.resolve

        return deferred.promise; //Promise not supported by template property
      }
    };
  });

由于模板属性不支持此功能,是否有任何(简单)“模拟”方式?

看起来指令解析是我最好的选择,但是我很难想出一个很好的方法来应用在解决方法中从WebSocket加载的模板。

我的目标是使用单个WebSocket连接进行所有通信。

2 个答案:

答案 0 :(得分:1)

你可以尝试另一种方法:

app.run(function($templateCache, myTemplateLoader) {
    myTemplateLoader.load('templateName').then(function(content) {
        $templateCache.put('templateName', content);
    });
});

现在您只需在指令中使用templateUrl属性:

app.directive('someDirective', function() {
    return {
        // ...
        templateUrl: 'templateName'
    };
});

答案 1 :(得分:0)

在解析中返回模板,请遵循dan wahlin的动态加载控制器示例,并执行与指令的routeResolver.resolve相同的功能

http://weblogs.asp.net/dwahlin/archive/2013/05/22/dynamically-loading-controllers-and-views-with-angularjs-and-requirejs.aspx

请告诉我,如果它不起作用,我会创建plunker并更新它