Javascript 使用控制器作为访问属性指令值
我知道在没有控制器的情况下如何操作,因为: htmlJavascript 使用控制器作为访问属性指令值,javascript,angularjs,Javascript,Angularjs,我知道在没有控制器的情况下如何操作,因为: html 假设我有一个名为ngUpperCase的指令(true或false) 如果我用的是这样的东西,怎么做指令 <div ng-controller="myControl as ctl" > <input type="text" ng-upper-case="ctl.isGiant" > </div> 由于不太清楚您想要实现什么,下面是一个我理解您需要的示例:根据变量将输入值更改为大写或小写: 函数ngUp
假设我有一个名为
ngUpperCase的指令(true或false)
如果我用的是这样的东西,怎么做指令
<div ng-controller="myControl as ctl" >
<input type="text" ng-upper-case="ctl.isGiant" >
</div>
由于不太清楚您想要实现什么,下面是一个我理解您需要的示例:根据变量将输入值更改为大写或小写:
函数ngUpperCase(){
返回{
限制:'A',
优先级:0,
链接:函数($scope,element,attr){
//---检索值
var val=$scope[attr.ngUpperCase];
var anotherVal=$scope.$eval(attr.ngUpperCase);
$scope.$watch(attr.ngUpperCase,function(val){
if(val){
元素[0]。值=元素[0]。值。toUpperCase();
}否则{
元素[0]。值=元素[0]。值。toLowerCase();
}
})
}
}
}
函数myController(){
this.isGiant=true;
}
角度模块('myApp',[]);
有棱角的
.module('myApp')
.controller('myController',myController)
.指令(“ngUpperCase”,ngUpperCase)代码>
由于不太清楚您想要实现什么,下面是一个我理解您需要的示例:根据变量将输入值更改为大写或小写:
函数ngUpperCase(){
返回{
限制:'A',
优先级:0,
链接:函数($scope,element,attr){
//---检索值
var val=$scope[attr.ngUpperCase];
var anotherVal=$scope.$eval(attr.ngUpperCase);
$scope.$watch(attr.ngUpperCase,function(val){
if(val){
元素[0]。值=元素[0]。值。toUpperCase();
}否则{
元素[0]。值=元素[0]。值。toLowerCase();
}
})
}
}
}
函数myController(){
this.isGiant=true;
}
角度模块('myApp',[]);
有棱角的
.module('myApp')
.controller('myController',myController)
.指令(“ngUpperCase”,ngUpperCase)代码>
你所拥有的应该有用。您遇到了什么问题?当使用“controller as”共享您的控制器代码时,它总是返回undefined,您是如何定义控制器的?相反,您可以直接将指令中的范围变量作为属性传递。您对val和另一个val不做任何操作,什么不起作用?是否要基于布尔值将输入值更改为大写?在控制器中,应将“isGaint”定义为this.isGaint
而不是$scope.isGaint
您所拥有的应该可以工作。您遇到了什么问题?当使用“controller as”共享您的控制器代码时,它总是返回undefined,您是如何定义控制器的?相反,您可以直接将指令中的范围变量作为属性传递。您对val和另一个val不做任何操作,什么不起作用?是否要基于布尔值将输入值更改为大写?在控制器中,应将“isGaint”定义为this.isGaint
,而不是$scope.isGaint
myApp.directive('ngUpperCase',function(){
return{
restrict:'A',
priority:0,
link:function($scope,element,attr){
//---to retrieve value
var val = $scope[attr.ngUpperCase];
var anotherVal = $scope.$eval(attr.ngUpperCase);
$scope.$watch(attr.ngUpperCase,function(val){
//---to watch
})
}
};
})
<div ng-controller="myControl as ctl" >
<input type="text" ng-upper-case="ctl.isGiant" >
</div>