我正在尝试创建一个指令,该指令将基于属性值将ngModel属性添加到标签。例如:
angular.module('myModule').
directive('myDirective', function() {
return {
link: function(scope, elem, attrs) {
var modelName = 'myPrefix.' + attrs.name;
attrs.$set('ngModel', modelName);
}
};
});
这样的HTML:
<input name="foo" my-directive></input>
被编译成
<input name="foo" ng-model="myPrefix.foo" my-directive></input>
它采用输入的名称,附加一个前缀,并将ngModel属性设置为该值。
当我尝试在链接函数中执行此操作时,似乎input
未在formController中进行注册,因此form.foo
返回未定义。
是否有可能完成我想做的事情?
编辑:
似乎该ngModel
属性已在HTML上设置,但未在表单中注册,或者未实例化ngModelController。如果查看ngModel
范围内的值,则在修改输入时它不会更改。
通过使用模板功能,我能够实现目标。我认为它在链接函数中不起作用,因为它是在收集所有指令之后发生的,因此编译器无法识别ngModel
已添加指令。我不确定为什么它在编译功能中不起作用(即使我将优先级设置为100)。
这是指令的工作版本:
angular.module('myModule').
directive('myDirective', function() {
return {
replace: true,
template: function(elem, attr) {
var newElem = '<input ng-model="model.' + attr.name + '">';
return newElem;
}
};
});
问题内容: 我有一个AngularJS属性指令,并且只要其父输入的值发生更改,我都想采取措施。现在,我正在使用jQuery: 没有jQuery,有没有办法做到这一点?我发现keyPress事件并没有完全实现我想要的功能,虽然我确定自己会提出解决方案,但是当我在Angular项目中使用jQuery时,我会有些紧张。 那么,Angular如何做到这一点呢? 问题答案: AngularJS文档中有一个很
问题内容: 是否可以“监视”指令上的ui更改?像这样的东西: 问题答案: 是。您可以使用,如果你在属性利用插值。 但是,如果这不是一个插值属性,并且您希望它可以从应用程序中的其他位置更改(绝对不建议这样做,请阅读Common Pitfalls ),那么函数可以返回: 无论如何,对您来说最好的方法可能是更改更改元素类的代码。它何时更改?
问题内容: 当绑定ng-model范围变量更改时,我正在尝试更新an的值。该模型更新时Ion.RangeSlider被使用,而不是相反。当 模型值更改时,具有相同ng-model的其他输入也会更新,因此这必须是一些特殊情况。 编辑:呜!这是一个片段@lin :)也是 Edit: Woo! Here’s a snippet @lin :) Also jsfiddle. 我已经在十多个有点相关的堆栈溢
问题内容: 我正在一个angularjs项目上工作,并且在select.not内没有绑定存在问题,但是相同的概念正在另一个select标签和同一html页面中工作。下面是代码。 功能放置在控制器中。 任何人的帮助都是非常可贵的……谢谢。 问题答案: 基于小马的托尼的小提琴: 使用控制器: http://jsfiddle.net/basarat/3y5Pw/43/
问题内容: 我认为开箱即用的指令上使用众所周知的角度属性应该很容易。 例如,如果我的指令名称是myDirective,我想以这种方式使用它: 无需像下面的示例一样定义自定义点击属性(onClick) 似乎ng-click可以工作,但是您也需要在指令标签上也指定ng-controller,这也是我所不希望的。我想在周围的div上定义控制器 是否可以在指令上使用ng-click以及在父html元素上定
我已经能够升级angularjs元素指令以用于angular 4。下面是一个示例代码: [myScores.js] [myScores.ts] 请注意,我正在使用 UpgradeComponent 来升级 myScores 元素指令。我已经在属性指令上尝试了相同的方法,但得到了一个错误。有没有办法升级属性指令? 下面是我升级属性指令的尝试: [绿色.js] [makeGreen.ts] 当加载一个