免责声明:在Extjs面板中放入角形不是我的选择。我有某些需要这样做的业务需求,因此请避免回答“您不应该这样做”的答案。

我正在用extjs 6.0.1编写移动Web应用程序。由于无法控制的各种原因,我需要能够在extjs应用程序中使用angular。我的第一个尝试是仅显示一个Ext Panel并将Angular标记放入html配置中,如下所示:

  this._angularPanel = Ext.create('Ext.Panel', {
    height: '100%',
    width: '100%',
    cls: 'angularPanel',
    html:
        '<div ng-app="">'+
          '<p class="angTest">Name : <input type="text" ng-model="name"></p>'+
          '<h1>Hello {{name}}</h1>'+
        '</div>'
  });


我还在页面顶部添加了脚本:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular.min.js"></script>


但是,它只是像在面板中解析旧的HTML一样解析它,所以结果是这样的:

javascript - Extjs面板内的 Angular-LMLPHP

我也尝试过使用这样的模板:

  this._angularPanel = Ext.create('Ext.Panel', {
    height: '100%',
    width: '100%',
    cls: 'angularPanel',
    tpl: [
        '<div ng-app="">'+
          '<p class="angTest">Name : <input type="text" ng-model="name"></p>'+
          '<h1>Hello {{name}}</h1>'+
        '</div>'
        ],
    data: {}
  });


在这种情况下,模板认为名称是Ext模板的自变量,这是有意义的,因为它在方括号中,因此屏幕看起来像这样:

javascript - Extjs面板内的 Angular-LMLPHP

有任何想法吗?

编辑:

现在也尝试手动引导它:

  this._angularPanel = Ext.create('Ext.Panel', {
    height: '100%',
    width: '100%',
    cls: 'angularPanel',
    html:
      '<div ng-controller="MyController"> '+
         'Hello {{greetMe}}! ' +
      '</div> '+
      '<script src="http://code.angularjs.org/snapshot/angular.js"></script> '+
          '<script> '+
          'angular.module("myApp", []).controller("MyController", ["$scope", function ($scope) { '+
                '$scope.greetMe = "World"; '+
              '}]); '+

          'angular.element(function() { '+
            'angular.bootstrap(document, ["myApp"]); '+
          '}); '+
      '</script>'
  });


仍然不起作用。我得到:

您好{{greetMe}}

代替:

你好,世界

最佳答案

好的,我在Extjs Panel的html配置中进行了工作。事实证明extjs不喜欢html配置中的脚本元素,因此我们需要将它们放置在其他位置。这就是我所做的。

在我的文档顶部,其中包括所有extjs文件和angular文件,我添加了以下代码:

  function bootstrapAngular() {
    angular.module('myApp', [])
        .controller('MyController', ['$scope', function ($scope) {
          $scope.greetMe = 'World';
        }]);

    angular.element(function() {
      angular.bootstrap(document, ['myApp']);
    });
  }


然后,在Extjs中(在我的情况下,我有一个卡片面板,我将其切换到其中带有angular html的空面板,然后调用bootstrap方法:

这是包含angularjs标记的面板:

  this._angularPanel = Ext.create('Ext.Panel', {
    height: '100%',
    width: '100%',
    cls: 'angularPanel',
    html:
      '<div ng-controller="MyController"> '+
         'Hello {{greetMe}}! ' +
      '</div> '
  });


然后,当我想将此面板设置为活动状态时,我只是这样做:

    this.setActiveItem(this._angularPanel);
    bootstrapAngular();


使用这种方法,您可以轻松地将Angularjs标记注入extjs面板。这是一个简单的示例,但是很明显,该方法应该允许所需的任何复杂程度。

特别感谢estus向我指出了引导方向。

关于javascript - Extjs面板内的 Angular ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42230064/

10-13 06:32