AngularJS app中的不同templateUrl

时间:2015-02-17 22:55:48

标签: javascript angularjs

我尝试根据$ scope值将我的指令放入不同的模板中。我在ng-repeat中使用指令,我向她发送数据对象和其他直接输入

指令:

/**
 * angular-streamlist directive
 */
angular.module('ngStreamlist', []).directive('webcams', function() {
    return {
        restrict: 'A',
        scope: {
            stream_webcam: '=webcam',
            stream_margin: '@margin'
        },

        templateUrl: function(elem, attr) {
            if (scope.stream_webcam.webcam_domain) {
                  if (scope.stream_webcam.webcam_domain == 'youtube') {
                      return 'templates/youtube.html';
                  }
                  if (scope.stream_webcam.webcam_domain == 'twitcam') {
                      return 'templates/twitcam.html';
                  }
            }
        }

    };
});

html:

<div data-ng-repeat="webcam in datas.webcams">
 <div data-webcams data-webcam="webcam" data-margin="no"></div>
</div>

和数据如下:     {     “id”:1,     “webcam_domain”:“youtube”,...等     }

我有这个错误:

ReferenceError: scope is not defined
    at Object.templateUrl (streamlist.js:13)

我不明白,范围是IS定义的,不是吗?

2 个答案:

答案 0 :(得分:0)

问题是scope不是templateUrl函数可用的局部变量。它是同一对象上的一个字段。只要调用的角度代码没有将this.scope设置为另一个对象,您就应该可以使用this访问它。

答案 1 :(得分:0)

您需要将范围添加到templateUrl功能中,如下所示:

templateUrl: function(scope, elem, attr)

否则您的功能无法访问它,因此您的错误消息。