javascript - 如何根据指令 Controller 中的值修改指令的 templateURL?

标签 javascript angularjs angularjs-directive angularjs-controller

我有以下 AngularJS 指令及其 Controller 。

我不想直接在指令的 template 字段中输入 HTML,而是想根据整数 aB 的值设置 templateURL 和关联 Controller 中的 aC

如果aB + ac >= 10,我希望它使用foo.html,否则我希望它使用bar.html。我怎样才能做到这一点?

myApp.directive('myDirective',function(){
    return {
      restrict:'E',
      scope: {
        myObject: '='
      },
      controller: 'myDirectiveCtrl',
      controllerAs: 'myDrCtrl',
      bindToController: true,
      template: 'aB={{myDrCtrl.myObject.aB}} aC={{myDrCtrl.myObject.aC}}'

    };
  }
);

myApp.controller('myDirectiveCtrl', function($scope){
    var self = this;
    $scope.$watch(function() {return self.myObject}, function (objVal) {
        console.log("watch fired");
        console.log('objVal.aB = ', objVal.aB);
        console.log('objVal.aC = ', objVal.aC);
    },true);

});

最佳答案

指令的

template/templateUrl 选项在创建指令作用域之前进行评估。所以基本上你无法在 templateUrl 函数内部获取作用域变量。

但是,是的,您可以通过使用 ng-include 指令来解决这个问题,with 表达式将根据作用域变量值动态创建一个 URL。

指令

myApp.directive('myDirective',function(){
    return {
      restrict:'E',
      scope: {
        myObject: '='
      },
      controller: 'myDirectiveCtrl',
      controllerAs: 'myDrCtrl',
      bindToController: true,
      template: '<ng-include src="(aB + ac >= 10) ? \'foo.html\': \'bar.html\'"></ng-include>'
    };
  }
);

关于javascript - 如何根据指令 Controller 中的值修改指令的 templateURL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34825896/

相关文章:

javascript - 在RethinkDB中获取replace(function() {})中的实际字段值

javascript - Jest - 模拟一个函数被导入到你正在测试的组件文件中

javascript - 向js中函数内部的对象添加方法

javascript - 如何使用 javascript 抓取复杂的登录页面?

javascript - 为 Controller 运行 $http 的服务

javascript - 如何使用 AngularJs 防止屏幕闪烁?

javascript - $timeout 如何解决这个问题?

javascript - 单击图像时部分暴露的 div 向上滑动

javascript - AngularJS ng-repeat 重新渲染

javascript - 与 AngularJS 中的 Controller 对话的 ScrollSpy 指令