学习AngularJs:Directive指令用法(完整版)
|
方式提供一种途经是 directive 能在父 scope 的上下文中执行一个表达式。此表达式可以是一个 function。 如下示例在 directive 中执行父 scope 的 function。
lt;!DOCTYPE htmlgt;
lt;html lang="zh" ng-app="myApp"gt;
lt;headgt;
lt;meta charset="UTF-8"gt;
lt;titlegt;AngularJS入门学习lt;/titlegt;
lt;script type="text/javascript" src="./1.5.3/angular.min.js"gt;lt;/scriptgt;
lt;/headgt;
lt;bodygt;
lt;div ng-controller="myController"gt;
lt;divgt;父scope:
lt;divgt;Say:{{value}}lt;/divgt;
lt;/divgt;
lt;divgt;隔离scope:
lt;div isolated-directive action="click()"gt;lt;/divgt;
lt;/divgt;
lt;/divgt;
lt;/bodygt;
lt;script type="text/javascript"gt;
var app = angular.module('myApp', []);
app.controller("myController", function ($scope) {
$scope.value = "hello world";
$scope.click = function () {
$scope.value = Math.random();
};
}).directive("isolatedDirective", function () {
return {
scope: {
action: ""
},
template: 'lt;input type="button" value="在directive中执行父scope定义的方法" ng-click="action()"/gt;'
}
})
lt;/scriptgt;
lt;/htmlgt;
效果:
指令的内容比较多,下面再来讲讲transclude、compline、link、contrller 8.transclude
lt;!DOCTYPE htmlgt;
lt;html lang="zh" ng-app="myApp"gt;
lt;headgt;
lt;meta charset="UTF-8"gt;
lt;titlegt;AngularJS入门学习lt;/titlegt;
lt;script type="text/javascript" src="./1.5.3/angular.min.js"gt;lt;/scriptgt;
lt;/headgt;
lt;div sidebox title="Links"gt;
lt;ulgt;
lt;ligt;First linklt;/ligt;
lt;ligt;Second linklt;/ligt;
lt;/ulgt;
lt;/divgt;
lt;/bodygt;
lt;script type="text/javascript"gt;
var app = angular.module('myApp', []);
app.directive('sidebox', function() {
return {
restrict: 'EA',
scope: {
title: '@'
},
transclude: true,
template: 'lt;div class="sidebox"gt;
lt;div class="content"gt;
lt;h2 class="header"gt;{{ title }}lt;/h2gt;
lt;span class="content" ng-transcludegt;
lt;/spangt;
lt;/divgt;
lt;/divgt;'
};
});
lt;/scriptgt;
lt;/htmlgt;
结果:
当nbsp; transclude: false,时
如果指令使用了transclude参数,那么在控制器无法正常监听数据模型的变化了。建议在链接函数里使用$watch服务。 若是为字符串,则将字符串当做是控制器的名字,来查找注册在应用中的控制器的构造函数
angular.module('myApp', [])
.directive('myDirective', function() {
restrict: 'A', // 始终需要
controller: 'SomeController'
})
// 应用中其他的地方,可以是同一个文件或被index.html包含的另一个文件
angular.module('myApp')
.controller('SomeController', function($scope, $element, $attrs, $transclude) {
// 控制器逻辑放在这里
});
也可以直接在指令内部的定义为匿名函数,同样我们可以再这里注入任何服务($log,$timeout等等)
[html] view plain copy 在CODE上查看代码片派生到我的代码片
angular.module('myApp',[])
.directive('myDirective', function() {
restrict: 'A',
controller:
function($scope, $element, $attrs, $transclude) {
// 控制器逻辑放在这里
}
});
另外还有一些特殊的服务(参数)可以注入 (1)$scope,与指令元素相关联的作用域 (2)$element,当前指令对应的 元素 (3)$attrs,由当前元素的属性组成的对象 (4)$transclude,嵌入链接函数,实际被执行用来克隆元素和操作DOM的函数 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |





