访问指令prop在视图的另一部分

时间:2016-03-22 21:36:30

标签: angularjs angularjs-directive

我正在使用autocomplete-directive,如果没有选项与用户输入相匹配,我想切换bool。

这是一个类似于我正在使用的指令:

angular.module('MyModule', []).directive('autoComplete', function($timeout) {
    return function(scope, iElement, iAttrs) {
            iElement.autocomplete({
                source: scope[iAttrs.uiItems],
                select: function() {
                    $timeout(function() {
                      iElement.trigger('input');
                    }, 0);
                }
            });
    };
});

具有一些名称和(如果需要)bool的控制器。 我说"如果需要"认为在视图中可能需要bool并且可能在控制器中不需要它?

function DefaultCtrl($scope) {
    $scope.names = ["john", "bill", "charlie", "robert", "alban", "oscar", "marie", "celine", "brad", "drew", "rebecca", "michel", "francis", "jean", "paul", "pierre", "nicolas", "alfred", "gerard", "louis", "albert", "edouard", "benoit", "guillaume", "nicolas", "joseph"];

  $scope.noMatch = true;

}

观点:

<div ng-app='MyModule'>
    <div ng-controller='DefaultCtrl'>
    <div ng-show="noMatch">
          NoMacth
        </div>
        <input auto-complete ui-items="names" ng-model="selected">

    </div>
</div>

fiddle

我试图通过执行以下操作来获取指令属性:

{{ auto-complete }} 

在视图中,希望它会显示一些内容,但它只会呈现0。

谢谢。

1 个答案:

答案 0 :(得分:0)

如果你的指令不使用隔离范围,那么它的范围已经是父控制器的范围,并且指令放在范围内的任何方法和属性都可以在整个视图中访问,就好像它们是正常父控制器范围的一部分,因为它们是。

您引用的指令似乎没有使用范围,因此它没有放置任何值来引用。

这是一个例子。如果您使用这样的指令,那么someProperty可以在父控制器范围内作为普通{{someProperty}}

在视图中的任何位置访问
angular.module('app.directives.myDirective', [
  'myService'
]).directive('myDirective', function (myService) {
  return {
    restrict: 'AE', // my personal preference
    templateUrl: 'directives/myDirectiveView.html', // optional
    link: function ($scope, element, attrs) {
      $scope.someProperty = 'true';
    }
  };
});