Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在控制器内部创建和设置时,角度指令和属性不起作用_Javascript_Angularjs_Angularjs Directive_Angularjs Scope - Fatal编程技术网

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操作。当用户单击按钮时,它必须创建一个包含属性和指令的控件。我想我可以在按钮上有一个指令来做这件事。我要试一试。