Angularjs:如何将图层添加到外部模板中?

Posted

技术标签:

【中文标题】Angularjs:如何将图层添加到外部模板中?【英文标题】:Angularjs: how to prepend a layer into an external template? 【发布时间】:2014-01-01 13:49:28 【问题描述】:

我可以在模板中预先添加一个元素吗?例如,这是我当前的代码,它如何显示和隐藏一个 spnner div,

controller.js,

$scope.spinner =  base_url+image_spinner;
$scope.loading = true;

return $http(
   method: 'GET', 
   url:'server.php'
).then(function(response) 
...

模板.html

<div class="spinner" ng-show="loading"><img src="spinner"/> &nbsp  loading</div>

<div ng-repeat='type in summaries.types' >
</div>

在我看来,这并不理想。当你有很多模板并且你想在它们被填充之前有一个微调器时,这是相当乏味的。

最好在加载 json 数据之前将&lt;div class="spinner" ng-show="loading"&gt;&lt;img src="spinner"/&gt; &amp;nbsp loading&lt;/div&gt; 移出模板并前置。有可能吗?

这是加载模板和控制器的方式,

routes.js,

return app.config(['$routeProvider', function ($routeProvider) 

        $routeProvider
        .when("/",
        
            templateUrl: base_url + "app/html/summary.html",
            controller: "Controller"
        )
        .when("/:module/:method/",
        
            templateUrl: base_url + "app/html/summary.html",
            controller: "Controller"
        );
    ]);

【问题讨论】:

加载模板的代码是什么? 【参考方案1】:

您可以将模板放在指令中:

myModule.directive('nsSpinner', function () 
    return 
        restrict: 'AE',
        template: '<div class="spinner" ng-show="loading">' +
            '<img src="' + base_url + image_spinner + '"/> &nbsp loading' +
        '</div>';
    ;
);

然后将其添加到您的 HTML 中:

<ns-spinner></ns-spinner>
<div ng-repeat="type in summaries.types"></div>

【讨论】:

谢谢。那我毕竟还需要在我的模板中添加&lt;ns-spinner&gt;&lt;/ns-spinner&gt;??【参考方案2】:

这似乎是指令的完美用例。如果您想要不同的微调器图像,您也可以将指令设计为接受imageUrl

angular.module('app').directive('spinner', function() 
    return 
        replace: true,
        restrict: 'A',
        scope: 
           imageUrl: '=',
           loading: '='
        ,
        template: '<div class="spinner" ng-show="loading"><img src=" imageUrl " /> loading </div>'
    
);

在您的 html 中,任何时候您想将微调器附加到 ajax,您只需声明 $scope.loading$scope.imageUrl。 AJAX返回后,一定要设置$scope.loading = false;

<div spinner imageUrl="path/to/img" loading="loading"></div>

如果您不喜欢向指令模板添加额外的属性,您可以做一些可定制性较低的事情:

angular.module('app').directive('spinner', function() 
    return 
        replace: true,
        restrict: 'A',
        template: '<div class="spinner" ng-show="loading"><img src=" imageUrl " /> loading </div>'
    
);

假设您的范围仍然包含 loadingimageUrl,则模板将是:

<div spinner></div>

【讨论】:

谢谢。所以我仍然需要在我的模板中添加&lt;div spinner&gt;&lt;/div&gt;?? 有了这个实现,是的。你可能会做一个更漂亮的实现来隐式地构造你的模板,但这不会很“Angular”。在我看来,在 HTML 中明确声明您的意图要简单得多,也更容易遵循,但需要注意的是每个模板都需要包含 &lt;spinner&gt; 指令。 您可以使用上面发布的类似技术将此微调器功能直接附加到您的&lt;ng-repeat&gt;,但请务必删除replace: true。这不是“角度黑客”,而是角度设计的方式。克服“我想要我的 jQuery”需要一段时间,但一旦你做到了,就没有回头路了。 我决定不更新答案。您可能可以这样做,但在我看来,这不值得麻烦。像这样的堆叠指令很快就会变得混乱。 ***.com/questions/11703086/…

以上是关于Angularjs:如何将图层添加到外部模板中?的主要内容,如果未能解决你的问题,请参考以下文章

AE中如何将一个图层设置为另一个图层的遮罩层

CAD中如何将图层进行锁定

arcgis9.3版本中,如何将图斑编号转成CAD文件呢?

如何将图层设置为意外结束动画的最终状态

如何利用AngularJS服务接入外部API

将图层名称复制到 Photoshop 中的文本框的脚本