将第二个范围传递给指令

时间:2017-06-09 11:33:24

标签: javascript angularjs angularjs-directive angularjs-scope

我没有什么问题,花了我几个小时才找到解决方案, 我有一个JSON,它返回我的页面名称+一些关于它的信息我将它传递给指令并且一切正常工作,直到我试图将另一个范围添加到指令显示那些项目形式JSON,项目形式json像往常一样显示但是第二个范围与我的网页的网址不是。我究竟做错了什么?

在角度控制器中SELECT `vehicle_type`, `num_passengers`, sum(if(`in_accident`,1,0)) as `num_accidents`, count(*) as `num_in_group`, sum(if(`in_accident`,1,0)) / count(*) as `percent_accidents` FROM `accidents` GROUP BY `vehicle_type`, `num_passengers` ORDER BY sum(if(`in_accident`,1,0)) / count(*)

ANGULAR DIRECTIVE


 pageURL = 'blabla.com';
 $scope.pageURL = pageURL;

HTML

    }).directive('itsearchresult', function() {
    return {
        restrict: 'AEC',
        scope: {
            result: '=result',
            pageURL: '@pageURL'
        },
        templateUrl: 'SearchResults.html'
    };

})

searchResults.html

<itsearchresult result="result" pageURL="pageURL"></itsearchresult>

link - &gt; {{pageURL}}&lt; - 这件小艺术作品&#39;没有显示:(

请帮助我,我今天真的不想挂起自己。

2 个答案:

答案 0 :(得分:1)

尝试这样..对于创建自定义指令,camel case是最佳实践。

  

AngularJS规范化元素的标记和属性名称,以确定哪些元素与哪些指令匹配。我们通常通过其区分大小写的camelCase规范化名称(例如ngModel)来引用指令。但是,由于HTML不区分大小写,我们通过小写形式引用DOM中的指令,通常使用DOM元素上的划线分隔属性(例如ng-model)。

 directive('itsearchresult', function() {
    return {
        restrict: 'AEC',
        scope: {
            result: '=result',
            pageUrl: '@pageUrl'
        },
        templateUrl: 'SearchResults.html'
    };

<itsearchresult result="result" page-url="{{pageURL}}"></itsearchresult>

答案 1 :(得分:1)

好吧,既然你没有对你的指令做任何事情,你应该删除该指令的范围并让它使用父范围。

}).directive('itsearchresult', function() {
    return {
        restrict: 'AEC',
        templateUrl: 'SearchResults.html'
    };

})

<itsearchresult></itsearchresult>

现在所有的调用都必须在你的控制器范围内

<h3 ng-if='result.nameWP == undefined'> <a href="{{pageURL}}{{result.name}}">
{{result.name}}</a></h3>
<h3 > <a href="{{pageURL}}{{result.postID}}">{{result.nameWP}}</a></h3> 

...{{result.content}}...

快速解决方案是重命名page-url key

<itsearchresult result="result" page-url="pageURL"></itsearchresult>

并在你的指令中

}).directive('itsearchresult', function() {
    return {
        restrict: 'AEC',
        scope: {
            result: '=result',
            pageUrl: '@pageUrl'
        },
        templateUrl: 'SearchResults.html'
    };

})