角度范围指令

时间:2015-07-17 08:50:50

标签: angularjs angularjs-directive angularjs-scope angularjs-controller

角度结构问题

我是angular.js的新手,我只是想知道如何处理某种情况。

所以基本上,我得到的是一个容器:

<div ng-controller="ContainerController">
  <container></container>
</div>

容器控制器和指令。

<script type="text/javascript" src="ContainerController.js"></script>
<script type="text/javascript" src="ContainerDirectives.js"></script>

现在,这些指令将<container>标记替换为示例html:<example>{{ data }}</example>

现在在ContainerController的范围内,我已将数据定义为字符串。 (这是所有示例目的)。但是,当指令访问替换它时,由于范围,它无法找到变量。

发生这种情况的原因是ContainerDirective脚本的范围不在ContainerController范围内。意味着它无法访问变量。

我只是不确定这些情况的结构实践。我在哪里放置所有内容,以便ContainerDirective可以访问ContainerController范围。

我希望我已经足够好地解释了一切

编辑:

Test.js

(function(){

    angular.module('test', []);

})();

TestController.js

(function(){

angular
    .module('test')
    .controller('TestController', [
        '$scope',
        TestController
    ]);

function TestController($scope) {
    $scope.test = 'test';
}

})();

TestDirective.js

(function(){

angular.module('test').directive('test', function () {
    return {
        replace: true,
        templateUrl: 'src/test/view/test.html',
        link: function (scope, element, attrs) {

        }
    };
});
})();

的test.html

<example><a href="abc/{{test}}">ClickMe</a></example>

index.html - body

<body ng-app="App" layout="row" ng-controller="TestController as page">
<test></test>

<script src="src/test/Test.js"></script>
<script src="src/test/TestController.js"></script>
<script src="src/test/TestDirective.js"></script>


<script type="text/javascript">
    angular
          .module('App', ['test']);
</script>
</body>

由于我重新命名某些变量并删除了大量数据的原因,但这是核心,我很难看到这个问题。

错误:[$ interpolate:noconcat]插值时出错:abc / {{test}} Strict Contextual Escaping禁止在需要可信值时连接多个表达式的插值。

2 个答案:

答案 0 :(得分:0)

也许阅读这篇文章可以解决你的很多问题,我知道当我试图理解指令{I}}

对于您的问题,我想发布有关您的指令和控制器.js文件包含的更多信息。从那以后,它可以跟随哪些变量被丢弃和覆盖。

答案 1 :(得分:0)

所以我弄清楚到底出了什么问题。基本上角度不允许打印另一个位置的iframe,除非你先:

  • 给他们完整的网址。

  • 然后允许外部网址作为受信任的网站。

要做到这一点,我必须基本上添加: Test.js中的

angular.module('test', []).config(function($sceDelegateProvider) {
    $sceDelegateProvider.resourceUrlWhitelist($sceDelegateProvider.resourceUrlWhitelist().concat([
        'http://www.test.com/**'
    ]));
});

这基本上取了我的白名单并将新网址连接到了它。

然后在 test.html

<example><iframe ng-src={{src}}></iframe></example>