为了账号安全,请及时绑定邮箱和手机立即绑定

第三种绑定函数换成第一种传入不同函数名后在link中定义不同函数可以吗以及区别?

&绑定用于传递父scope函数,也就是说调用了controller的函数。我想其实可以从外部传入所要调用的函数名,然后函数在指令里面的link中定义不是也可以吗?但是我写的代码并没有运行成功,请大家看看代码有什么错?以及请问这种同一指令调用不同函数到底是写到控制器里面好还是写到指令里好,以及为什么?谢谢

<!doctype html>
<html ng-app="myApp">
    <head>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
         <script src="http://apps.bdimg.com/libs/angular.js/1.2.16/angular.min.js"></script>
    </head>
    <body>
        <div ng-controller="myAppCtrl">
            <xingoo pd="sayHello"></xingoo>
            <xingoo pd="sayNo"></xingoo>
            <xingoo pd="sayYes"></xingoo>
        </div>
        <script type="text/javascript">
            var myAppModule = angular.module("myApp",[]);
            myAppModule.directive("xingoo",function(){
                return {
                    restrict:'AE',
                    scope:{
                        say:'@pd'
                    },
                    template:'<input type="text" ng-model="username"/><br>'+
                        '<button ng-click="{{ say }}({name:username})">click</button><br>',
                    repalce:true
                    link : function(scope, element, attrs) {
                        $scope.sayHello = function(name){
                            console.log("hello !"+ name);
                        };
                        $scope.sayNo = function(name){
                            console.log("no !"+ name);
                        };
                        $scope.sayYes = function(name){
                            console.log("yes !"+ name);
                        };
                    }
                }
            })
        </script>
    </body>
</html>


正在回答

1 回答

我也是初学,希望意见给你邮用:

  1. 首先你的在页面中写了 controller 但是函数那边却未定义,这里会报错

  2. link : function(scope, element, attrs) {

                     $scope.sayHello = function(name){ //这边的 写变量名字的时候写 scope,用却多了一个 $所以报错

  3. <button ng-click="{{ say }}({name:username})">click</button><br>中的 ng-click="{{ say }}({name:username})" 这个 say 是个字符串 还可以这样调用函数的吗?我试了不行耶

  4. 同样我也碰到的问题希望你也帮我看看

    1.             link : function(scope, element, attrs) {

    2.                 console.log(scope);我从外部绑定进来的 say 这样打印出来有 scope.say

    3.                 console.log(scope.say); ///但是这里却 undefined 

  5. 下面我上我的代码


  1. <!doctype html>

  2. <html ng-app="myApp">

  3.     <head>

  4.          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  5.          <script src="http://apps.bdimg.com/libs/angular.js/1.2.16/angular.min.js"></script>

  6.     </head>

  7.     <body>

  8. <div ng-controller="myAppCtrl">

  9.     <xingoo pd="sayHello"></xingoo>

  10.     <xingoo pd="sayNo"></xingoo>

  11.     <xingoo pd="sayYes"></xingoo>

  12. </div>

  13. <script type="text/javascript">

  14.     var myAppModule = angular.module("myApp",[])

  15.             .controller( 'myAppCtrl',[ '$scope', function ($scope) {

  16.             } ] );

  17.     myAppModule.directive("xingoo",function(){

  18.         return {

  19.             restrict:'AE',

  20.             scope:{

  21.                 say:'@pd'

  22.             },

  23.             template:'<input type="text" ng-model="username"/><br>'+

  24.             '<button ng-click="fnSay(username)">{{ say }}</button><br>',

  25.             repalce:true,

  26.             link : function(scope, element, attrs) {

  27.                 console.log(scope);

  28.                 console.log(scope.say);

  29.                 scope.fnSay = function (name) {

  30.                     if(!name){

  31.                         name = '';

  32.                     }

  33.                     scope[scope.say](name);

  34.                 };


  35.                 scope.sayHello = function(name){

  36.                     console.log("hello !"+ name);

  37.                 };

  38.                 scope.sayNo = function(name){

  39.                     console.log("no !"+ name);

  40.                 };

  41.                 scope.sayYes = function(name){

  42.                     console.log("yes !"+ name);

  43.                 };

  44.             }

  45.         }

  46.     });

  47. </script>

  48.     </body>

  49. </html>

0 回复 有任何疑惑可以回复我~
#1

billiepander 提问者

谢谢回答,完美运行。至于您第四点说的scope.say并不是undefined啊,我在chrome里和火狐都显示了传入的string的。
2016-06-13 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
AngularJS实战
  • 参与学习       205445    人
  • 解答问题       1158    个

一起学习AngularJS的基础教程,通过实例学习并学会AngularJS

进入课程

第三种绑定函数换成第一种传入不同函数名后在link中定义不同函数可以吗以及区别?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信