javascript

java

python

c#

node.js

android

reactjs

c++

php

jquery

html

css

git

ruby-on-rails

.net

ios

sql

c

string

ruby

javascript-将ES6类用作Angular 1.x指令

我正在做一个小项目,以围绕ES6带来的礼物袋,我试图将注册一个类设置为有角度的指令,但是却遇到此错误“ TypeError:无法将一个类作为函数调用 ”,但是从示例中我发现他们只是编写了该类并以angular作为指令注册了它。 这是我的指令。

class dateBlock {
  constructor () {
    this.template = '/app/dateblock/dateblock.html';
    this.restrict = 'AE';
    this.scope = {};
  }
};

export default dateBlock

以及我将其导入然后声明的索引。

import calendarController from './calendar/calendar.js'
import dateBlock from './dateblock/dateblock.js'

function setup($stateProvider) {
    $stateProvider
      .state('base', {
        url: '',
        controller: calendarController,
        templateUrl: '/app/calendar/calendar.html'
      });
    };

setup.$inject = ['$stateProvider']

var app = angular.module('calApp',['ngAnimate','ui.router','hmTouchEvents', 'templates'])
  .config(setup)
  .controller('calendarController', calendarController)
  .directive('dateBlock', dateBlock)

如果我错过了一些关键的步骤,我很想听听。 另外还有一个疑问,将所有应用程序组件导入索引并在其中全部注册或导出应用程序并在组件内导入和注册是否更清洁?

trans by 2019-10-12T11:55:00Z

angularjs-在自定义事件上启用angular-ui工具提示

我正在尝试使用angular-ui的工具提示功能向用户显示特定字段无效,但似乎只能在某些预定义的触发器上显示该工具提示。 除了那些触发器之外,还有什么方法可以触发工具提示?

例如:

<input
    type="text"
    tooltip="Invalid name!"
    tooltip-position="right"
    tooltip-trigger="myForm.username.$invalid">
trans by 2019-10-09T18:12:23Z

javascript-AngularJS指令传递字符串

此伪指令试图创建一个称为进度条的HTML元素,该元素可在您逐页移动时跟踪进度。 我正在尝试将其用作:     <progress-bar progress='1' max='6' error="true"></progress-bar>

我只是试图将信息从html中的^^元素传递给我的指令,并处理该信息以适当地更改进度栏。

这对于采用整数值的“ progress”和“ max”有效,但是由于某种原因,注释掉的代码将处理“错误”(这是一个字符串),这会引起问题。 我是angularJS的新手,所以对上述任何听起来令人困惑或不清楚的事情,我感到抱歉。请询问是否需要详细说明。 提前致谢!

app.directive('progressBar', function(){

var compileProgressBar = function(scope, elem, attrs) {
    var append = '<nav class="navbar navbar-fixed-bottom navbar-footer" role="navigation">\
                    <div class="container">\
                        <div class="row">';
    var i = 1;
    while (i <= parseInt(scope.max)) {
        if (i <= parseInt(scope.progress)) {
            //if (scope.error == "true"){
                //...
            //}
            //else {
            append += '<div class="col-xs-1"><div class="circle-filled"><center>'+i+'</center></div></div>'
            //}
        } else {
            append += '<div class="col-xs-1"><div class="circle-hallow"><center>'+i+'</center></div></div>'
        }
        i++;
    }
    append += '</div></div></nav>'
    elem.append(append);
    elem.bind('click', function(){
        if (scope.progress > 1) {
            history.back();
            scope.$apply();
        }
    });
}

return {
    restrict: 'AE',
    scope: {
        max: '=max',
        progress: '=progress'
        //error: '=error'
    },
    link: compileProgressBar
}

});

trans by 2019-10-06T20:44:43Z

javascript-在ng-repeat中使用指令,以及作用域'@'的神秘力量

如果您希望在工作代码中看到问题,请从此处开始:[http://jsbin.com/ayigub/2/edit]

考虑以下几乎等效的方式来编写简单的指令:

app.directive("drinkShortcut", function() {
  return {
    scope: { flavor: '@'},
    template: '<div>{{flavor}}</div>'
  };
});

app.directive("drinkLonghand", function() {
  return {
    scope: {},
    template: '<div>{{flavor}}</div>',
    link: function(scope, element, attrs) {
      scope.flavor = attrs.flavor;
    }
  };
});

单独使用时,这两个指令的工作方式和行为相同:

  <!-- This works -->
  <div drink-shortcut flavor="blueberry"></div>
  <hr/>

  <!-- This works -->
  <div drink-longhand flavor="strawberry"></div>
  <hr/>

但是,在ng-repeat中使用时,仅快捷方式版本有效:

  <!-- Using the shortcut inside a repeat also works -->
  <div ng-repeat="flav in ['cherry', 'grape']">
    <div drink-shortcut flavor="{{flav}}"></div>
  </div>
  <hr/>

  <!-- HOWEVER: using the longhand inside a repeat DOESN'T WORK -->      
  <div ng-repeat="flav in ['cherry', 'grape']">
    <div drink-longhand flavor="{{flav}}"></div>
  </div>

我的问题是:

  1. 为什么长手版本在ng-repeat中不起作用?
  2. 您如何使ng-repeat的长手版本工作?
trans by 2019-10-06T12:19:19Z

angularjs-在Angular指令temp中有条件地添加数据属性

我正在为指令模板。 如果范围内的属性设置为true,则应将isDropDown附加到元素。 如果变量为false,则此数据属性不应呈现为元素的属性。

例如,如果scope变量为true,则模板应呈现:

<span data-toggle="dropdown"></span>

如果为false,则模板应呈现:

<span></span>

模板将如何完成此任务?


例如,我知道我可以使用isDropDown有条件地包含一个类。 如果我希望模板呈现此内容:

<span class="dropdown"></span>

然后我的模板如下所示:

"<span ng-class="{ 'dropdown': isDropDown }"></span>

如果范围变量isDropDowndata-toggle,则模板将简单地呈现:

<span></span>

因此,模板中有一种方法可以有条件地添加isDropDown。是否有模板语法可以让我有条件地添加data-toggle


我为模板尝试过的一件事是:

"<span data-toggle="{ 'dropdown': isDropDown }"></span>

我对上述模板的想法是,如果范围变量isDropDown为true,则将data-toggle的值设置为“下拉”。 如果isDropDown为false,则data-toggle的值将只是一个空字符串""。但这似乎不起作用。

trans by 2019-10-03T15:31:11Z

angularjs-如何理解指令的“终端”?

在此页面中:[http://docs.angularjs.org/guide/directive]

指令定义对象

终奌站

如果设置为true,则当前优先级将是将要执行的最后一组指令(由于未定义在相同优先级上的执行顺序,因此仍将执行当前优先级的任何指令)。

我不太了解。 directive4是什么意思? 如果有这样的指令:

  1. 具有{优先级:1,终端:false}的指令1
  2. 带{优先级:10,终端:false}的指令2
  3. 指令3,{优先级:100,终端:false}
  4. 带{优先级:100,终端:true}的指令4 //这是真的
  5. 指令5,{优先级:1000,终端:false}

请注意,directive4terminal:true,其他则有false

如果有html标记,则具有所有5条指令:

<div directive1 directive2 directive3 directive4 directive5></div>

5个指令的执行顺序是什么?

trans by 2019-10-02T03:21:12Z

angularjs-如何测试角度事件?

我需要测试事件是否正确发出或广播,并手动触发事件。

最好的方法是什么?

trans by 2019-10-01T00:26:32Z

angularjs-在Angular Directi的链接函数中使用ng-click vs bind

在链接函数中,是否存在将函数绑定到click事件的更多“角度”方式?

现在,我在做...

myApp.directive('clickme', function() {   
  return function(scope, element, attrs) {
    scope.clickingCallback = function() {alert('clicked!')};
    element.bind('click', scope.clickingCallback);   
} });

这是Angular的方式还是丑陋的破解? 也许我不应该这么担心,但是我是这个框架的新手,并且想知道“正确”的做事方式,尤其是随着框架的发展。

trans by 2019-09-30T10:51:30Z

javascript-angularjs ng-style:background-image无法正常工作

我正在尝试通过使用角度ng-style将背景图像应用于div(之前我尝试过使用具有相同行为的自定义指令),但是它似乎无法正常工作。

<nav
    class="navigation-grid-container"
    data-ng-class="{ bigger: isNavActive == true }"
    data-ng-controller="NavigationCtrl"
    data-ng-mouseenter="isNavActive = true; $parent.isNavActive = true"
    data-ng-mouseleave="isNavActive = false; $parent.isNavActive = false"
    data-ng-show="$parent.navInvisible == false"
    data-ng-animate="'fade'"
    ng-cloak>

    <ul class="navigation-container unstyled clearfix">
        <li
            class="navigation-item-container"
            data-ng-repeat="(key, item) in navigation"
            data-ng-class="{ small: $parent.isNavActive, big: isActive == true }"
            data-ng-mouseenter="isActive = true; isInactive= false"
            data-ng-mouseleave="isActive = false; isInactive= true">

            <div data-ng-switch on="item.id">

                <div class="navigation-item-default" data-ng-switch-when="scandinavia">
                    <a class="navigation-item-overlay" data-ng-href="{{item.id}}">
                        <div class="navigation-item-teaser">
                            <span class="navigation-item-teaser-text" data-ng-class="{ small: isScandinavia }">{{item.teaser}}</span>
                        </div>
                    </a>
                    <span class="navigation-item-background" data-ng-style="{ 'background-image': 'public/img/products/{{item.id}}/detail/wide/{{item.images.detail.wide[0]}}' }"></span>
                </div>

                <div class="navigation-item-last" data-ng-switch-when="static">
                    <div class="navigation-item-overlay">
                        <div class="navigation-item-teaser">
                            <span class="navigation-item-teaser-text">
                                <img data-ng-src="{{item.teaser}}">
                            </span>
                        </div>
                    </div>
                    <span class="navigation-item-background">
                        <img class="logo" data-ng-src="{{item.images.logo}}">
                    </span>
                </div>

                <div class="navigation-item-default" data-ng-switch-default>
                    <a class="navigation-item-overlay" data-ng-href="{{item.id}}">
                        <div class="navigation-item-teaser">
                            <span class="navigation-item-teaser-text">{{item.teaser}}</span>
                        </div>
                    </a>
                    <span class="navigation-item-background" data-ng-style="{ 'background-image': 'public/img/products/{{item.id}}/detail/wide/{{item.images.detail.wide[0]}}' }"></span>
                </div>

            </div>
        </li>
    </ul>
</nav>

不过,如果我尝试使用背景色,则效果似乎很好。 我也尝试了远程源和本地源http://lorempixel.com/g/400/200/sports/,但都没有用。

trans by 2019-09-23T11:46:17Z

javascript - 如何将输入限制为仅接受数字?

我在AngularJS中使用ngChange来触发自定义函数,该函数将删除用户添加到输入的任何字母。

<input type="text" name="inputName" data-ng-change="numbersOnly()"/>

问题是我需要定位触发numbersOnly()的输入,以便我可以删除输入的字母。 我在Google上看了很长时间,并且无法找到任何与此有关的内容。

我能做什么?

trans by 2019-09-20T15:12:31Z

javascript - 如何在Angular中单元测试隔离范围指令

在AngularJS中单元测试隔离范围的好方法是什么

JSFiddle显示单元测试

指令片段

    scope: {name: '=myGreet'},
    link: function (scope, element, attrs) {
        //show the initial state
        greet(element, scope[attrs.myGreet]);

        //listen for changes in the model
        scope.$watch(attrs.myGreet, function (name) {
            greet(element, name);
        });
    }

我想确保指令正在侦听更改 - 这不适用于隔离范围:

    it('should watch for changes in the model', function () {
        var elm;
        //arrange
        spyOn(scope, '$watch');
        //act
        elm = compile(validHTML)(scope);
        //assert
        expect(scope.$watch.callCount).toBe(1);
        expect(scope.$watch).toHaveBeenCalledWith('name', jasmine.any(Function));
    });

更新:我通过检查预期的观察者是否被添加到子范围来实现它,但它非常脆弱,并且可能以未记录的方式使用访问者(也可能在没有通知的情况下进行更改!)。

//this is super brittle, is there a better way!?
elm = compile(validHTML)(scope);
expect(elm.scope().$$watchers[0].exp).toBe('name');

更新2:正如我所提到的,这很脆弱! 这个想法仍然有效,但在较新版本的AngularJS中,访问者已从scope()更改为isolateScope()

//this is STILL super brittle, is there a better way!?
elm = compile(validHTML)(scope);                       
expect(elm.isolateScope().$$watchers[0].exp).toBe('name');
trans by 2019-09-16T01:43:40Z

如何使用'替换'功能来定制AngularJS指令?

这个问题在这里已有答案:

  • 为什么在AngularJS指令中不推荐使用`replace`属性?                                     4个答案

为什么replace=true/falsereplace=false在下面的代码中没有任何影响?

当replace = false时,为什么不显示“某些现有内容”?

或者更谦虚地说,你能否解释replace=true/false指令中的功能以及如何使用它?

JS/角:

<script>
    angular.module('scopes', [])
          .controller('Ctrl', function($scope) {
                $scope.title = "hello";

          })
          .directive('myDir', function() {
            return {
              restrict: 'E',
              replace: true,
              template: '<div>{{title}}</div>'
            };
      });
</script>

HTML:

<div ng-controller="Ctrl">
    <my-dir><h3>some existing content</h3></my-dir>
</div>

在Plunker中看到它:

[http://plnkr.co/edit/4ywZGwfsKHLAoGL38vvW?p=preview]

trans by 2019-09-01T17:08:07Z

AngularJS:ng Include vs directive

我不太明白何时使用指令以及何时使用nginclude更合适。 举个例子:我有一个部分的,ngInclude,这是用于输入和确认密码的html。 我在注册页面和更改密码页面下使用它。 这两个页面各有一个控制器,部分html没有专用控制器。

我应该使用指令还是ngInclude

trans by 2019-08-14T07:10:04Z

angularjs - 在i中的angular ng-bind-html和指令

Plunker Link

我有一个元素,我想将HTML绑定到它。

upper

这样可行。 现在,除此之外,我还有一个绑定到绑定html的指令:

upper

但是指令upper与div和锚不进行评估。 我如何使其工作?

trans by 2019-08-13T18:35:11Z

从AngularJS中没有隔离范围的指令调用控制器函数

我似乎无法在不使用隔离范围的情况下从指令中调用父作用域上的函数。 我知道如果我使用隔离范围,我可以使用&#34;&amp;&#34; 在隔离中访问父作用域上的函数,但在不必要时使用隔离作用域会产生后果。 请考虑以下HTML:

<button ng-hide="hideButton()" confirm="Are you sure?" confirm-action="doIt()">Do It</button>

在这个简单的例子中,我想显示一个JavaScript确认对话框,只有在点击&#34; OK&#34;时才调用doIt()。 在确认对话框中。 使用隔离范围很简单。 该指令看起来像这样:

.directive('confirm', function () {
    return {
        restrict: 'A',
        scope: {
            confirm: '@',
            confirmAction: '&'
        },
        link: function (scope, element, attrs) {
            element.bind('click', function (e) {
                if (confirm(scope.confirm)) {
                    scope.confirmAction();
                }
            });
        }
    };
})

但问题是,因为我使用隔离范围,上面示例中的ng-hide不再针对父范围执行,而是在隔离范围内执行(因为在任何指令上使用隔离范围会导致所有指令 元素使用孤立的范围)。 这是上面例子的jsFiddle,其中ng-hide不起作用。 (请注意,在这个小提琴中,当您在输入框中键入&#34; yes&#34;时,该按钮应隐藏。)

替代方案是不使用隔离范围,这实际上是我真正想要的范围,因为不需要隔离该指令的范围。 我唯一的问题是,如果我没有在隔离范围内传递它,如何在父范围上调用方法?

这是一个jsfiddle,我不使用孤立的范围,ng-hide工作正常,但是,当然,对confirmAction()的调用不起作用,我不知道如何制作它 工作。

请注意,我真正寻找的答案是如何在外部作用域上调用函数而不使用隔离的作用域。 我不想以另一种方式使这个确认对话框工作,因为这个问题的关键是要弄清楚如何调用外部作用域,并且仍然能够使其他指令对父作用域起作用。

或者,如果其他指令仍然适用于父作用域,我会有兴趣听到使用隔离范围的解决方案,但我不认为这是可能的。

trans by 2019-08-13T13:17:50Z

angularjs - 指令测试中的$ apply vs $ digest

如果我有一个指令响应范围上特定属性的状态,并且我想在我的测试中更改该属性并验证它是否正确响应,这是进行更改的最佳方法?

我已经看到了这两种模式:

scope.$apply(function() {
    scope.myAttribute = true;
});

scope.myAttribute = true;
scope.$digest();

它们之间有什么区别,哪个更好,为什么?

trans by 2019-08-09T00:46:27Z

指令隔离范围与AngularJS中的ng-repeat范围

我有一个带隔离范围的指令(这样我可以在其他地方重用该指令),当我将该指令与selected一起使用时,它无法工作。

我已阅读有关此主题的所有文档和Stack Overflow答案,并了解问题。 我相信我已经避免了所有常见的陷阱。

所以我理解我的代码因selected指令创建的范围而失败。 我自己的指令创建了一个isolate-scope,并对父作用域中的对象进行双向数据绑定。 我的指令将为此绑定变量分配一个新的对象值,当我的指令在没有name-row(父变量正确更新)的情况下使用时,这非常有效。 但是,对于selected,分配会在selected范围内创建新变量,并且父变量不会看到更改。 所有这些都是基于我所读到的预期。

我还读到,当给定元素上有多个指令时,只创建一个范围。 并且可以在每个指令中设置selected以定义指令的应用顺序; 指令按优先级排序,然后调用它们的编译函数(在[http://docs.angularjs.org/guide/directive)搜索单词优先级。]

所以我希望我可以使用优先级来确保我的指令先运行并最终创建一个隔离范围,当运行selected时,它会重新使用隔离范围,而不是创建一个原型继承父范围的范围。 name-row文档指出该指令以优先级selected运行。尚不清楚selected是更高优先级还是更低优先级。 当我在我的指令中使用优先级name-row时,它没有什么区别,所以我尝试了2000.但这使事情变得更糟:我的双向绑定变为undefined并且我的指令不显示任何内容。

我创造了一个小提示来展示我的问题。 我在我的指令中注释掉了selected设置。 我有一个名称对象列表和一个名为name-row的指令,它显示了名称对象中的名字和姓氏字段。 单击显示的名称时,我希望它在主范围中设置selected变量。 名称数组selected变量使用双向数据绑定传递给name-row指令。

我知道如何通过调用主范围中的函数来使其工作。 我也知道,如果selected在另一个对象中,并且我绑定到外部对象,事情会起作用。 但我现在对这些解决方案不感兴趣。

相反,我的问题是:

  • 如何防止2000创建原型继承自父作用域的作用域,而是使用我的指令的isolate-scope?
  • 为什么我的指令中的优先级2000不起作用?
  • 使用Batarang,是否可以知道正在使用哪种类型的示波器?
trans by 2019-08-07T08:49:45Z

从AngularJS指令访问属性

我的AngularJS模板包含一些自定义HTML语法,如:

<su-label tooltip="{{field.su_documentation}}">{{field.su_name}}</su-label>

我创建了一个指令来处理它:

.directive('suLabel', function() {
  return {
    restrict: 'E',
    replace: true,
    transclude: true,
    scope: {
      title: '@tooltip'
    },
    template: '<label><a href="#" rel="tooltip" title="{{title}}" data-placement="right" ng-transclude></a></label>',
    link: function(scope, element, attrs) {
      if (attrs.tooltip) {
        element.addClass('tooltip-title');
      }
    },
  }
})

一切正常,但attrs.tooltip表达式除外,它始终返回undefined,即使tooltip属性在执行console.log(attrs)时可从Google Chrome的JavaScript控制台中看到。

有什么建议吗?

更新:Artem提供了一个解决方案。 它包括这样做:

link: function(scope, element, attrs) {
  attrs.$observe('tooltip', function(value) {
    if (value) {
      element.addClass('tooltip-title');
    }
  });
}

AngularJS + stackoverflow =幸福

trans by 2019-08-05T15:16:49Z

angularjs指令在属性中指定的调用函数,并将参数传递给i

我想创建一个链接到属性的指令。 该属性指定应在作用域上调用的函数。 但我也想将一个参数传递给在link函数中确定的函数。

<div my-method='theMethodToBeCalled'></div>

在链接函数中,我绑定到一个jQuery事件,该事件传递一个我需要传递给函数的参数:

app.directive("myMethod",function($parse) {
  restrict:'A',
  link:function(scope,element,attrs) {
     var expressionHandler = $parse(attrs.myMethod);
     $(element).on('theEvent',function( e, rowid ) {
        id = // some function called to determine id based on rowid
        scope.$apply(function() {expressionHandler(id);});
     }
  }
}

app.controller("myController",function($scope) {
   $scope.theMethodToBeCalled = function(id) { alert(id); };
}

如果没有传递id,我可以使它工作,但是一旦我尝试传递参数,该函数就不再被调用了

trans by 2019-08-01T15:36:11Z

将AngularJS范围变量从指令传递给控制器的最简单方法?

将AngularJS范围变量从指令传递给控制器的最简单方法是什么? 我见过的所有例子看起来都很复杂,是不是我可以从指令访问控制器,并设置其中一个范围变量?

trans by 2019-07-26T11:35:58Z

1 2 3 4 下一页 共4页