为term.js创建自定义角度指令

时间:2014-11-29 05:50:54

标签: angularjs angularjs-directive terminal

我正在为自己创建一个自定义指令,特别是term.js。它通常使用起来非常简单:

var term = new Terminal({
   cols: 80,
   rows: 24,
   screenKeys: true
});

term.open(document.body);
term.write('\x1b[31mWelcome to term.js!\x1b[m\r\n');

为此,我修改了一个hello-world指令示例以满足我的需要:

app.directive('terminal', function() {
    return {
        restrict: 'E',
        scope: {
            name: '@'
        },
        template: '<span>Hello {{name}}<div class="term"></div></span>',
        link: function(scope, elem, attrs) {
            var term = new Terminal({
                cols: 80,
                rows: 24,
                screenKeys: true
            });
            // window.w = elem;
            term.open(elem.find("div"));
            term.write('\x1b[31mWelcome to term.js!\x1b[m\r\n');
        }
    }
});

我在我的HTML中使用它:

<terminal name="Terminal 1"></terminal>

然而,虽然我看到&#34; Hello Terminal 1&#34;在网页上,控制台中显示以下错误:

TypeError: Cannot read property 'defaultView' of undefined
    at Terminal.open (http://localhost:4000/js/term.js:700:43)
    at link (http://localhost:4000/js/MyApp.js:23:18)

我是AngularJS的新手,无法弄清楚出了什么问题。 elem.find()似乎返回一个DOM对象,没有像JQuery那样的.get()方法,但是我也用JQquery尝试了它,(而不是jqLit​​e)。那么我看不到的问题是什么?

1 个答案:

答案 0 :(得分:1)

我似乎需要这样做:

     term.open(elem.find("div")[0]);