Javascript 在控制器内部创建和设置时,角度指令和属性不起作用
我有一个指示:Javascript 在控制器内部创建和设置时,角度指令和属性不起作用,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,我有一个指示: app.directive('toggleText', function () { return { restrict: 'A', link: function (scope, element,attr) { element.bind('click', function(evt) { alert('hello'); }); } }; }
app.directive('toggleText', function () {
return {
restrict: 'A',
link: function (scope, element,attr) {
element.bind('click', function(evt) {
alert('hello');
});
}
};
})
当我将它添加到元素中时,它会工作。它提醒你好
但是,当我尝试在控制器内创建元素并以这种方式添加指令时:
var myElement = document.createElement('div');
var attr = document.createAttribute('toggle-text');
myElement.setAttributeNode(attr);
我可以看到指令被添加到我的调试器中的元素中,但它不起作用。
尝试添加ng单击时出现相同问题,ng包括。。以及控制器内使用setAttributeNode的其他角度属性或指令。不要在控制器内手动执行DOM操作等;angular的设计不是为了解决这个问题。相反,使用$compile 类似这样的东西:控制器代码
function($scope, $compile) {
var myElement = $compile('<div toggle-text></div>')($scope);
// do stuff with it
}
永远不要在控制器中进行DOM操作。这就是指令的作用。它不起作用的原因是您的更改没有使用angular编译。可能与@m59重复谢谢。我在那页上投了你一票,这正是我想要的。但我仍然需要在控制器内部创建,正如您在那里解释的,我使用$compile。谢谢你为什么要在控制器里做?我向您保证,在任何情况下都不需要在控制器中执行DOM操作。当用户单击按钮时,它必须创建一个包含属性和指令的控件。我想我可以在按钮上有一个指令来做这件事。我要试一试。