在 AngularJS 中,指令(Directive)是一种强大的功能,允许你创建自定义的 DOM 元素或属性。作用域(Scope)是 AngularJS 的核心概念之一,它充当控制器和视图之间的粘合剂。
默认情况下,指令会继承父作用域。
angular.module('myApp', [])
.controller('MyController', function($scope) {
$scope.message = 'Hello from controller';
})
.directive('myDirective', function() {
return {
template: '<div>{{message}}</div>'
};
});
创建一个独立的作用域,不与父作用域共享。
.directive('myDirective', function() {
return {
scope: {}, // 隔离作用域
template: '<div>{{message}}</div>',
link: function(scope) {
scope.message = 'Hello from directive';
}
};
});
从父作用域传递字符串值。
.directive('myDirective', function() {
return {
scope: {
message: '@' // 单向绑定
},
template: '<div>{{message}}</div>'
};
});
HTML 使用:
<my-directive message="{{parentMessage}}"></my-directive>
在指令和父作用域之间建立双向绑定。
.directive('myDirective', function() {
return {
scope: {
message: '=' // 双向绑定
},
template: '<div><input ng-model="message"></div>'
};
});
HTML 使用:
<my-directive message="parentMessage"></my-directive>
从父作用域传递方法。
.directive('myDirective', function() {
return {
scope: {
onAction: '&' // 方法绑定
},
template: '<button ng-click="onAction()">Click me</button>'
};
});
HTML 使用:
<my-directive on-action="parentFunction()"></my-directive>
原因:使用了共享作用域而非隔离作用域 解决:使用隔离作用域或明确的数据绑定
原因:可能是在指令中修改了原始类型而非对象属性 解决:确保绑定的是对象属性而非原始值
// 控制器中
$scope.data = { message: 'Hello' };
// 指令中
scope: {
message: '='
}
// HTML中
<my-directive message="data.message"></my-directive>
原因:方法调用语法不正确 解决:确保在HTML中使用正确的调用语法
<!-- 错误 -->
<my-directive on-action="parentFunction">
<!-- 正确 -->
<my-directive on-action="parentFunction()">
通过合理使用这些作用域传递方式,可以创建出灵活、可维护的AngularJS指令。
没有搜到相关的文章