Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.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 - Fatal编程技术网

Javascript 角度指令错误意外字符串

Javascript 角度指令错误意外字符串,javascript,angularjs,Javascript,Angularjs,我试图创建一个角度指令来初始化,该指令将在下面的select标记中使用 <select ng-model="add.doctype" class="form-control select2" select2 append-to-body ng-options="x.tipe for x in ::Types"> <option value=""></option> </select> 它在控制台中给出了一个指向$(“.select2”).

我试图创建一个角度指令来初始化,该指令将在下面的select标记中使用

<select ng-model="add.doctype" class="form-control select2" select2 append-to-body ng-options="x.tipe for x in ::Types">
    <option value=""></option>
</select>
它在控制台
中给出了一个指向
$(“.select2”).select2({theme:“bootstrap”})的意外字符串
错误,我错过了什么吗?

1)检查以确保jQuery包含在我们的项目中

2) 初始化要用作类选择器的指令。根据Angular的指令文件:

注意:创建指令时,默认情况下仅限于属性和元素。为了创建由类名触发的指令,您需要使用restrict选项

3) 将逻辑放在指令的链接函数中:

angular.module('myapp.theme')
.directive('select2', select2)

function select2() {
    return{
        restrict: 'C',
        link: function(){
            $(".select2").select2({ theme: "bootstrap" });
        }
    }
}

正如eschie所指出的,您应该使用link函数使代码正常工作

但是,正如eschie所做的那样,使用指令/是没有意义的,因为每次angular找到它时,JQuery代码都会选择类为“select2”的所有元素,因为angular每次找到select2类时都会执行指令

你应该这样做:

angular.module('myapp.theme').directive('select2', select2)
function select2() {
    return{
        restrict: 'A',
        link: function(scope, element, attr){
            $(element).select2({ theme: "bootstrap" });
        }
    }
}
注意,我对属性进行了限制。我注意到您在
select
标记中选择了2作为类和属性。
在角度上,最好使用属性作为指令。如果要在指令中保留第一类use
restrict:'C'

是否可以删除'use strict';进行检查<代码>返回{…}
表示返回的对象没有键。请尝试`返回{link:function(scope,element){jQuery(element[0])。select2({theme:'bootstrap'}}}}删除
使用strict
不解决问题。OP似乎在使用属性
select2
以及类。此外,如果您的值超过1,您可能应该将元素传递给link函数。select2“元素修改了指令,并将指令名称更改为
select21
,它不会给出任何错误,也不会初始化
select
标记。将restrict更改为“CA”以初始化类和属性上的指令。另外,请确保指令、类和/或属性标记的名称都匹配。它会给出一个错误
$(…)。select2不是一个函数
@JosephGoh您是否在index.html文件中包含select2库?我使用的是
bower
,它假定会自动正确添加库。但感谢各位付出的时间和努力,真的很感激。我已经找到了负责这项工作的用户界面。再次感谢大家。@JosephGoh你应该说这句话作为一个答案,或者至少是一个编辑,这样人们就会知道,对你来说,问题已经解决了。
angular.module('myapp.theme').directive('select2', select2)
function select2() {
    return{
        restrict: 'A',
        link: function(scope, element, attr){
            $(element).select2({ theme: "bootstrap" });
        }
    }
}