angularJS 用directive的时候,放指令的地方传递的数据,怎么在template中用ng-model取到

大家都没有认真看题,问题仍然没有解决( ´╥ω╥`)

我想定制一个单选控件,备选项根据传入指令的参数而定,我这里是由select-item-name指定的等于"review", 问题是在radio这里,ng-model的值不能解析成review,始终解析为参数名selectItemName

问题的重点在于,指令属性中传的值,和模板中的ng-model绑定的值的交互,不是跟父controller中的值,这里不涉及父作用域和父controller

图片描述

图片描述

directive代码:

angular.module('starter')
        .directive('mySelect',['$rootScope','$window','$timeout',
                        function($rootScope, $window, $timeout){
            return {
                restrict:'A',
                replace:false,
               
                scope: {
                    selectItemName:'='
                },
               
                templateUrl: 'templates/select-directive.html',
                link:function(scope, element, attrs){
                    scope.selectItems = ['aa','bb'];
                    scope.$watch(attrs.selectItemName, function(newVal, oldVal){
                    console.log('newVal:'+newVal);
                    
                    if(newVal==oldVal){
                      return;
                    } 
                    
                    });

                }
            }
        }]);
        
阅读 5.4k
3 个回答

怎么能用@,不是应该换=么?

补充:

首先,改成=是对的,这里面你要了解的是=@的区别:

图片描述

文档地址:$compile

其次,你在指令中的$watch部分,我有异议,如果关心selectItemName的变化,应该这么写:

scope.$watch('selectItemName', function(newVal, oldVal){
    console.log('newVal:'+newVal);

    if(newVal==oldVal){
        return;
    }

});

关于watchExpression的更多内容,可以看:

图片描述

文档地址:scope

我不太看得懂你的问题是什么,不过我把你的代码引入试了一遍,把=改回@后,其实已经取到了。
图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进