[angular]指令之6require

来源:互联网 发布:安卓陀螺仪软件 编辑:程序博客网 时间:2024/06/12 14:09
<!DOCTYPE html><html lang="en" ng-app="testDirectiveRequire"><head>    <meta charset="UTF-8">    <title>测试DirectiveRequire</title>    <script src="../frameWork/angular.js"></script>    <script src="../testDirective/testDirectiveRequire.js"></script></head><body ng-controller="testDirectiveRequireController"><h3>内容1:同级别的情况,加"?"可以为非必须的require</h3><test-require-sibling-three test-require-sibling-one test-require-sibling-two></test-require-sibling-three><h3>内容2:不同级别的情况,加"?"可以为非必须的require</h3><test-require-parent></test-require-parent></body></html>
/** * 由于directive在angular中的地位之重,所以得认真对待。但理解难啊,所以决定逐个属性进行实例分析 * directive实例分析第六篇:require * Created by liyanq on 16/12/22. *//**require的地位也不能忽视啊,直接影响link的第四个参数的来源。当然如果不涉及父子作用域或兄弟作用域信息的传递,它也没啥作用了。 * 1,原型:require property can be a string, an array or an object; *         require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'], * 2,不写require,link的第四个参数就是自己的controller。 * 3,只写"string",属于同一标签,所require的指令必须以"A"的形式存在,且不能循环require,被require的指令不能template. * 4,scope的区别,这个非常重要。 *    这三个指令(Sibling的)的scope是同一对象,无论在什么地方(link,controller) *    如果有一个指令的scope为true,那么他们共用一个新的scope. *    如果三个指令的scope都为false,那么他们共用外层scope,例如:testDirectiveRequireController的scope。 *    两个指令(parent,child)的scope不同对象,除非scope都是false. *    以上情况不清楚原因,可能和指令为属性的时候有关系。也许指令为属性的时候,共享元素的scope?(瞎猜的~) * * *    突然感觉就难了,真特么难啊,千变万化,指令存在的形式太多了。 *    require的其他形式如:?、?^、?^^、^^(上上层的自己一样的指令)、arr、obj,甚至和bindToController属性有关系, *    这些内容等到时候再说吧。 * */var app = angular.module("testDirectiveRequire", []);app.controller("testDirectiveRequireController", function ($scope) {    $scope.message = "testDirectiveRequireController";}).directive("testRequireSiblingOne", function () {    var dir = {};    dir.restrict = "A";    dir.replace = true;    dir.scope = false;    dir.controller = function ($scope) {        console.log("testRequireSiblingOne->controller");        this.onSiblingClickOne = function () {            console.log("我是来自testRequireSiblingOne的controller的事件");        }    };    return dir;}).directive("testRequireSiblingTwo", function () {    var dir = {};    dir.restrict = "A";    dir.replace = true;    dir.scope = false;    dir.require = "testRequireSiblingOne";    dir.link = function (scope, elem, attr, ctr) {        console.log("testRequireSiblingTwo->link");        scope.onSiblingClickTwo = function () {            ctr.onSiblingClickOne();            console.log("我是来自testRequireSiblingTwo的link的事件");        }    };    dir.controller = function ($scope) {        console.log("testRequireSiblingTwo->controller");        this.onSiblingClickTwo = function () {//必须等加载完了,才能调用,否则无效            $scope.onSiblingClickTwo();        };    };    return dir;}).directive("testRequireSiblingThree", function () {    var dir = {};    dir.restrict = "E";    dir.replace = true;    dir.scope = true;    dir.require = "testRequireSiblingTwo";    dir.template = function (tElement, tAttrs) {        return "<div>来自testRequireSiblingThree指令模版" +            "<button ng-click='onSiblingClickThree()'>执行兄弟的click事件</button>" +            "</div>"    };    dir.link = function (scope, elem, attr, ctr) {        console.log(scope);        console.log("testRequireSiblingThree->link");        scope.onSiblingClickThree = function () {            ctr.onSiblingClickTwo();            console.log("我是来自testRequireSiblingThree的controller的事件");        }    };    return dir;}).directive("testRequireParent", function () {    var dir = {};    dir.restrict = "E";    dir.replace = true;    dir.scope = true;    dir.template = function (tElement, tAttrs) {        return "<div>来自testRequireParent指令模版" +            "<test-require-child></test-require-child>" +            "</div>"    };    dir.controller = function ($scope) {        console.log($scope);        console.log("testRequireParent->controller");        this.onParentClick = function () {//必须等加载完了,才能调用,否则无效            console.log("我是来自testRequireParent的controller的事件");        };    };    return dir;}).directive("testRequireChild", function () {    var dir = {};    dir.restrict = "E";    dir.replace = true;    dir.scope = true;    dir.require = "^testRequireParent";    dir.template = function (tElement, tAttrs) {        return "<div>testRequireChild" +            "<button ng-click='onChildClick()'>执行兄弟的click事件</button>" +            "</div>"    };    dir.link = function (scope, elem, attr, ctr) {        console.log(scope);        console.log("testRequireChild->link");        scope.onChildClick = function () {            // ctr.onParentClick();            console.log("我是来自testRequireChild的controller的事件");        }    };    return dir;});
                                             
0 0
原创粉丝点击