AngularJS自定义指令ng-show/ng-hide

Mat*_*att 9 javascript angularjs

警告:Angular新手提前.

我正在尝试创建一个自定义窗口小部件,默认情况下将显示"回复"链接,单击时,应隐藏它并显示textarea.这是我到目前为止,但它不起作用::

  .directive('replybox', function ($rootScope) {
    var linkFn = function (scope, element, attrs) {
        var label = angular.element(element.children()[0]);
        scope.showInput = false;

        label.bind("click", textbox);

        function textbox() {
            scope.showInput = true;
        }
    };
    return {
        link:linkFn,
        restrict:'E',
        scope:{
            id:'@',
            label:'@',
            showInput:'='
        },
        template:'<a ng-hide="showInput">label</a><textarea ng-show="showInput">    </textarea>',
        transclude:true
    };
})
Run Code Online (Sandbox Code Playgroud)

任何指南将不胜感激.谢谢!

pko*_*rce 16

Matias,这是一个有用的jsFiddle:http://jsfiddle.net/pkozlowski_opensource/Z6RzD/

实际上有很多事情发生,但我认为最重要的事情是你需要使用Scope.$ apply以从"anular的世界之外"改变角度通知范围.默认情况下,angular不会触发模板重新评估每个DOM事件,因此您需要将其包装到apply中:

scope.$apply('showInput = true');
Run Code Online (Sandbox Code Playgroud)

更多信息:http://docs.angularjs.org/api/ng.$ro​​otScope.Scope

您的示例中还有其他值得注意的项目:

  • 我想您希望能够将'label'作为属性传递给您的指令,然后在模板中使用它 - 如果是这样,您需要使用{{label}}表达式
  • 我不太确定'id'属性的用途是什么,所以从我的小提琴中省略了它
  • 'showInput'也是如此 - 无法弄清楚你想要得到的是什么