Javascript 在我的案例中如何在指令中分配数据
我正在寻找John Papa风格的最佳实践。 然而,我对他的指导风格有一个疑问Javascript 在我的案例中如何在指令中分配数据,javascript,html,angularjs,Javascript,Html,Angularjs,我正在寻找John Papa风格的最佳实践。 然而,我对他的指导风格有一个疑问 angular .module('app') .directive('myExample', myExample); function myExample() { var directive = { restrict: 'EA', templateUrl: 'app/feature/example.directive.html', scope
angular
.module('app')
.directive('myExample', myExample);
function myExample() {
var directive = {
restrict: 'EA',
templateUrl: 'app/feature/example.directive.html',
scope: {
max: '='
},
link: linkFunc,
controller: ExampleController,
// note: This would be 'ExampleController' (the exported controller name, as string)
// if referring to a defined controller in its separate file.
controllerAs: 'vm',
bindToController: true // because the scope is isolated
};
return directive;
function linkFunc(scope, el, attr, ctrl) {
console.log('LINK: scope.min = %s *** should be undefined', scope.min);
console.log('LINK: scope.max = %s *** should be undefined', scope.max);
console.log('LINK: scope.vm.min = %s', scope.vm.min);
console.log('LINK: scope.vm.max = %s', scope.vm.max);
}
}
ExampleController.$inject = ['$scope'];
function ExampleController($scope) {
// Injecting $scope just for comparison
var vm = this;
vm.min = 3;
console.log('CTRL: $scope.vm.min = %s', $scope.vm.min);
console.log('CTRL: $scope.vm.max = %s', $scope.vm.max);
console.log('CTRL: vm.min = %s', vm.min);
console.log('CTRL: vm.max = %s', vm.max);
}
<!-- example.directive.html -->
<div>hello world</div>
<div>max={{vm.max}}<input ng-model="vm.max"/></div>
<div>min={{vm.min}}<input ng-model="vm.min"/></div>
angular
.module('应用程序')
.指令(“myExample”,myExample);
函数myExample(){
var指令={
限制:“EA”,
templateUrl:'app/feature/example.directive.html',
范围:{
最大值:'='
},
链接:linkFunc,
控制器:例如控制器,
//注意:这将是“ExampleController”(导出的控制器名称,作为字符串)
//如果在其单独的文件中引用已定义的控制器。
controllerAs:'vm',
bindToController:true//因为作用域是隔离的
};
返回指令;
函数linkFunc(范围、el、属性、ctrl){
console.log('LINK:scope.min=%s***应该是未定义的,'scope.min');
console.log('LINK:scope.max=%s***应该是未定义的,'scope.max');
log('LINK:scope.vm.min=%s',scope.vm.min');
log('LINK:scope.vm.max=%s',scope.vm.max');
}
}
示例控制器。$inject=['$scope'];
函数示例控制器($scope){
//注入$scope只是为了比较
var vm=这个;
vm.min=3;
log('CTRL:$scope.vm.min=%s',$scope.vm.min);
log('CTRL:$scope.vm.max=%s',$scope.vm.max);
console.log('CTRL:vm.min=%s',vm.min');
console.log('CTRL:vm.max=%s',vm.max');
}
你好,世界
max={{vm.max}
min={{vm.min}
在他的示例中,他在一个文件中同时包含控制器和指令。我的问题是如何知道我的代码的哪一部分在
linkFunc
下,哪一部分在ExampleController
下?例如,如果我想注入服务,我应该将其添加到linkFunc
?如果我收到一组数据,我应该在linkFucn
下使用scope.data
还是在controller下使用vm.data
?非常感谢 这里有几个需要考虑的原则:
- 基本区别在于控制器可以公开API,链接函数可以使用require与控制器交互最佳实践:当您想向其他指令公开API时,请使用控制器。否则请使用链接
- 在控制器中编写业务逻辑,在链接中编写DOM操作
$scope
(在控制器中)==vm
(在控制器中)==scope
(在链接中),您可以在linkFucn或vm.data下执行scope.data
您并没有将服务注入到链接函数中,而是注入到控制器中
只是我的理解