Angularjs 如何在angular JS中创建可重用的自定义指令

Angularjs 如何在angular JS中创建可重用的自定义指令,angularjs,angularjs-directive,Angularjs,Angularjs Directive,如何在AngularJS中创建可重用的模型窗口 我希望它是可重用的,因为我们用超链接触发模式窗口,并根据传递的参数设置弹出内容。例如: <div ng-controller="SampleCtrl"> <a ng-click="toggleModal('FirstParam')">first</a> <a ng-click="toggleModal('SecondParam')">second</a> <a

如何在AngularJS中创建可重用的模型窗口

我希望它是可重用的,因为我们用超链接触发模式窗口,并根据传递的参数设置弹出内容。例如:

<div ng-controller="SampleCtrl">
    <a ng-click="toggleModal('FirstParam')">first</a>
    <a ng-click="toggleModal('SecondParam')">second</a>
    <a ng-click="toggleModal('ThirdParam')">Third</a>
</div>

?

我特别想知道:

  • 如何将变量从控制器函数传递到自定义指令
  • 有关于可重用的自定义指令和作用域的好教程吗
  • 对于可重用的自定义指令,还有其他设计模式吗
查看有关编写自定义指令的一些基础知识,以及指令和编译的angular docs有$compile的所有详细信息

这是一个plnkr,我发布了一个覆盖的模板,用于ui引导的popover。根据您的具体用例,您可能只需要覆盖模板或使用$modal或其他一些模态UI控件来生成指令就可以了

//代码在这里
angular.module(“myApp”、“ui.bootstrap”、“ngSanitize”).controller(“TestCtrl”、函数($scope){
})
angular.module(“template/popover/popopover.html”,[])。运行([“$templateCache”),函数($templateCache){
$templateCache.put(“模板/popover/popover.html”,
"" + 
"" + 
"" + 
"" +
“取消”+
“适用”);
}]);

谢谢您的回答。我已经浏览了angularjs.org和自定义指令,但是我被“如何将参数从控制器传递到指令‘link’函数”所震惊如果我知道这一点,我会基于超链接动态加载模板。基本上,您只需要阅读编译文档中有关范围定义的详细信息details@Martin阿特金斯:谢谢你的编辑
// Code goes here

angular.module("myApp", ["ui.bootstrap", "ngSanitize"]).controller("TestCtrl", function($scope){


})

angular.module("template/popover/popover.html", []).run(["$templateCache", function ($templateCache) {
        $templateCache.put("template/popover/popover.html",
            "<div class='popover {{placement}}' ng-class='{ in: isOpen(), fade: animation() }'>" + 
            "<div class='arrow'></div><div class='popover-inner'>" + 
            "<h3 class='popover-title' ng-bind='title' ng-show='title'></h3>" + 
            "<div class='popover-content' ng-bind-html='content'></div>" +
            "<button class='btn btn-cancel' ng-click='manualHide()'>Cancel</button>" +
            "<button class='btn btn-apply' ng-click='manualHide()'>Apply</button></div></div>");
    }]);