所以我有这个指令,比如说mySave,几乎就是这个

app.directive('mySave', function($http) {
   return function(scope, element, attrs) {
      element.bind("click", function() {
          $http.post('/save', scope.data).success(returnedData) {
              // callback defined on my utils service here

              // user defined callback here, from my-save-callback perhaps?
          }
      });
   }
});

元素本身看起来像这样
<button my-save my-save-callback="callbackFunctionInController()">save</button>

callbackFunctionInController现在只是
$scope.callbackFunctionInController = function() {
    alert("callback");
}

当我在my-save指令中使用console.log() attrs.mySaveCallback时,它只是给了我一个字符串callbackFunctionInController(),我读了somewhere我应该对其进行$ parse解析,这样就可以了,所以我尝试使用$parse(attrs.mySaveCallback)给我带来了一些功能,但是我几乎没有在寻找,它给了我
function (a,b){return m(a,b)}

我究竟做错了什么?这种方法从一开始就存在缺陷吗?

最佳答案

因此,似乎最好的方法是使用ProLoser建议的隔离范围

app.directive('mySave', function($http) {
   return {
      scope: {
        callback: '&mySaveCallback'
      }
      link: function(scope, element, attrs) {
        element.on("click", function() {
            $http.post('/save', scope.$parent.data).success(returnedData) {
                // callback defined on my utils service here

                scope.callback(); // fires alert
            }
        });
      }
   }
});

为了将参数传递回 Controller ,请执行此操作
[11:28] <revolunet> you have to send named parameters
[11:28] <revolunet> eg my-attr="callback(a, b)"
[11:29] <revolunet> in the directive: scope.callback({a:xxx, b:yyy})

关于javascript - 指令attr中的回调函数在不同的attr中定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15896985/

10-11 04:23