繁体   English   中英

通过Angularjs指令中的属性

[英]Passing though an attribute in an Angularjs directive

我正在工作的指令只是freebase搜索窗口小部件(jquery)的包装。 这是我尝试制定的第一个指令,但遇到了一些问题。

所需的功能:1.能够传递语言(两个字母的代码)以显示搜索结果作为属性2.能够指定在选择项目时要调用的功能(通过选择中的数据进行传递)

我在这里用指令设置了一个plunkr 第二点功能工作正常,但是我在语言要求方面遇到了麻烦,我不确定为什么。

静态执行语言代码(不插值)时,可以很好地传递语言代码:

if(attrs.lang){
     language = attrs.lang;
}

但是当尝试传递这样的值时,我似乎无法使其工作:

attrs.$observe('lang', function(value) {
      if(value === ""){
           language = 'en';
      } else {
          console.log("lang val " + value);
          language = value;
      }
});

知道为什么这行不通吗? 任何意见,将不胜感激。

目前的指令:

directive('suggest', function($http) {
    var language; 
    return {
        restrict: 'E',
        template: "<input type='text'>",
        replace:true,
        scope:{
            selectData:'=',
            onSelect:'&'
        },
        link: function(scope, element, attrs) {

            attrs.$observe('lang', function(value) {
                if(value === ""){
                    language = 'en';
                } else {
                    console.log("lang val " + value);
                    language = value;
                }
            });

            if(attrs.lang){
                language = attrs.lang;
            }


            $(element).suggest({

                "lang": language
            })
            .bind("fb-select", function(e, info) { 
                console.log(info);
                scope.onSelect({data:info});
                console.log("language: " + language);
                scope.$apply(function(){
                    console.log("hello apply here");
                    scope.selectData = info;
                });
            });
        }
    };
});

从您的问题尚不清楚,但我认为您是指以下问题:在插件演示中,我在该语言中键入“ fr”,然后在提示框中输入内容以获取“ en”语言的结果。

这是因为您已经用默认语言(en)初始化了荐插件。 提供给$observe函数的函数不是在这里调用的-在初始化指令后,稍后会调用它。 因此,更改语言后,您需要重新初始化建议插件。

我不确定执行此操作的正确方法是什么,因为我对该插件不熟悉,但是至少以下更改正在起作用-只需将重新初始化添加到$observe侦听器即可:

    attrs.$observe('lang', function(value) {
      console.log("lang val " + value);
        language = value;
        $(element).suggest({lang: language});
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM