javascript - 指令中的 Angular 条件模板;基于将范围变量与 promise 隔离的决策

标签 javascript angularjs

基本上我尝试对地址进行条件格式化。

我做了一个 plnkr 来可视化简化的问题: http://plnkr.co/edit/A5eV96H9eKIua9mJyKSL?p=preview

指令负责显示正确的模板:

app.directive('tqFormatAddress', function(){
  return {
    restrict: 'E',
    scope: {
      address:'='
    },
    link: function (scope, element, attrs) {
      switch(scope.address.country) {
      case "de":
         scope.template = 'adress-de.html';
         break;
      case "uk":
         scope.template = 'adress-uk.html';
         break;
      }
    },
    template: '<ng-include src="template"></ng-include>',
  };
});

这是做这样的事情的正确方法吗?

下一步是将代码集成到我的应用程序中。我使用 $resource 获取数据:

$scope.ansprechpartner = this.Ansprechpartner.get({id: $routeParams.id});

在 View 中:

<tq-format-address address="ansprechpartner.Dienstadresse"></tq-format-address>

现在我在指令中收到错误,因为资源尚未解析。

一种方法是将整个 ansprechpartner 提供给指令:

<tq-format-address address="ansprechpartner.Dienstadresse" promise="ansprechpartner"></tq-format-address>

然后做这样的事情(未经测试的演示代码):

    link: function (scope, element, attrs) {
      ansprechpartner.then(function () {
          switch(scope.address.country) {
          case "de":
             scope.template = 'adress-de.html';
             break;
          case "uk":
             scope.template = 'adress-uk.html';
             break;
          }
      });
    },

是否有另一种方法可以在没有 promise 的情况下做到这一点?

最佳答案

在这种情况下没有理由不使用 ngInclude

如果您不想在目录中使用 Promise,则可以使用表达式,这样模板就会在地址对象发生变化时立即更改:

app.directive('tqFormatAddress', function(){
  return {
    restrict: 'E',
    scope: {
      address:'='
    },
    link: function (scope, element, attrs) {

      scope.template = function () {
        if (scope.address && scope.address.country)
          return 'adress-' + scope.address.country + '.html';

        return '';
      };
    },
    template: '<ng-include src="template()"></ng-include>',
  };
});

关于javascript - 指令中的 Angular 条件模板;基于将范围变量与 promise 隔离的决策,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24952576/

相关文章:

javascript - 在javascript中计算多个输入值

javascript - 将特定页面重定向到另一个页面和域

AngularJS:服务、提供商、工厂

javascript - JQuery - 删除具有特定类的类子元素

javascript - d3.js 为 Y 轴包装长标签

javascript - 将 css 和 javascript 与 webforms bundle 在一起

javascript - angularjs 清理以仅删除 JS

javascript - 我可以将参数传递给使用 _.lodash 去抖动的函数吗?

javascript - 从 javascript 打开 Bootstrap 模式对话框不起作用

javascript - 添加选项来选择会自动选择