Javascript 能否在NG-MODEL中使用表达式?
我想在NG-MODEL指令中使用一个表达式,有没有办法完成这个绑定?可以用编译之类的东西来完成吗?这是我的标记Javascript 能否在NG-MODEL中使用表达式?,javascript,angularjs,angularjs-directive,angular-ngmodel,Javascript,Angularjs,Angularjs Directive,Angular Ngmodel,我想在NG-MODEL指令中使用一个表达式,有没有办法完成这个绑定?可以用编译之类的东西来完成吗?这是我的标记 <!DOCTYPE html> <html> <head> <title></title> <link href="Content/bootstrap.min.css" rel="stylesheet" /> </head> <body ng-controller="AppCtr
<!DOCTYPE html>
<html>
<head>
<title></title>
<link href="Content/bootstrap.min.css" rel="stylesheet" />
</head>
<body ng-controller="AppCtrl">
<div></div>
<range min="0" max="100" model="width"></range>
</body>
</html>
<script src="Scripts/angular.min.js"></script>
<script>
var app = angular.module("pager", []);
app.run(function($rootScope){
console.log($rootScope);
});
angular.element(document).ready(function(){
angular.bootstrap(document.querySelector("html"), ["pager"]);
})
app.directive("range", function ($compile) {
return {
restrict: "E",
replace: true,
scope:{
min:"@",
max:"@",
model:"@"
},
template: "<input type='range' ng-model='{{model}}' value='0' min='{{min}}' max='{{max}}'/>",
}
})
</script>
var-app=angular.module(“寻呼机”,[]);
app.run(函数($rootScope){
log($rootScope);
});
元素(文档).ready(函数(){
引导(document.querySelector(“html”),[“pager]”);
})
应用指令(“范围”,函数($compile){
返回{
限制:“E”,
替换:正确,
范围:{
最小:“@”,
马克斯:“@”,
型号:“@”
},
模板:“”,
}
})
ng model={{model}}给您一个错误,有没有办法让它从指令中读取model属性?这是可能的链接方式,还是我必须使用$compile来完成这一点。我希望我的指令能够在子范围中创建变量,然后将其绑定到指令生成的ng模型。我想使用指令中的“model”属性为ng模型创建变量。在本例中,我希望“width”是{{model}}表达式所在的位置。这就是您想要的吗 如果将
@
替换为=
,您将在控制器$scope
上看到它(不使用表达式),请查看下面的代码并拨弄它
编辑
app.directive("range", function ($compile) {
return {
restrict: "E",
replace: true,
scope: {
min: "@",
max: "@",
model: '='
},
compile: function () {
return {
pre: function (scope, elem, attrs) {
// The directives isolated scope
console.log(scope);
// Controller scope
console.log(scope.$parent);
}
}
},
template: "<input type='range' ng-model='model' value='0' min='{{min}}' max='{{max}}'/>"
}
});
app.directive(“范围”),函数($compile){
返回{
限制:“E”,
替换:正确,
范围:{
最小:“@”,
马克斯:“@”,
型号:'='
},
编译:函数(){
返回{
前置:功能(范围、要素、属性){
//指令的作用域是孤立的
console.log(范围);
//控制器范围
console.log(范围$parent);
}
}
},
模板:“”
}
});
您为什么会有这个指令?只是为了节省一点打字时间?您不需要插值模型。移除{{}。我想让它重复使用。我不确定最好的方法是什么。老实说,我处于一个有角度的中间级别,传递变量模型并使其等于“宽度”的最佳方法是什么?这确实有帮助,但我知道模型属性的原因,我希望
model=width
绑定到控制器中的$scope.width
,这样我就可以映射它并重新使用指令,我希望添加一个model=“height”模型的范围输入,它映射到$scope.height等等,范围:{model:&“}会更有意义。我仍在学习如何与孩子一起工作scopes@Jesse-您可以重用指令-在指令内部,它将绑定到模型,但在控制器中,
模型仍将绑定到$scope.width
-它们都引用相同的对象,谢谢,你会成功的,试试看有什么效果best@jesse我不确定我是否明白。我的示例在controllers范围内有宽度
绑定,这就是为什么我有log范围按钮。显示高度和宽度,以及如何与ng样式一起使用。此外,这些属性仍然可以在您的指令中访问,可以通过链接
或编译
。感谢Asok,这正是我所要做的,我只需要稍微修改一下代码,使其更具可重用性。我有大约10种不同的东西需要绑定,如宽度、高度、边界半径、颜色等。。。