javascript - Angular 指令 "="值绑定(bind)到范围,但未定义?

标签 javascript angularjs angularjs-directive

我在 Angular 应用程序中定义了以下指令:

(function() {
    'use strict';

    angular
    .module('almonds')
    .directive('security', ['$animate', 'AuthFactory', directive]);

    function directive($animate, AuthFactory) {
        var directive = {
            restrict: 'EA',
            scope: {
                operation: "@",
                clearance: "@",
                project: "="
            },
            link: linkFunc
        };

        return directive;

        function linkFunc($scope, $element, $attr, ctrl, $transclude) {
            var block, childScope, previousElements;

            console.log($scope.project);

            if($scope.project) {
                var projectId = $scope.project.id;
            }

            var operation = $scope.operation;
            var clearance = $scope.clearance;


            if (projectId) {
                var value = AuthFactory.hasProjectAccess(projectId, clearance);
                console.log('PROJECT SECURITY:', projectId, clearance, value);
            } else {
                var value = AuthFactory.hasAccess(operation, clearance);
                console.log('ORG SECURITY:', operation, clearance, value);
            }
        }
    }
// Controller.$inject = ['$scope'];
//
// function Controller($scope) {
//     var vm = this;
//
//     activate();
//
//     function activate() {
//
//     }
// }
})();

它将用作接收 operation 的元素。或project值以及 clearance value,然后将使用该元素是否会渲染(我省略了这部分,但它的功能基本上与 ng-if 相同)。

这是一个使用中的示例:

<span security project="vm.project" clearance="admin">
    <a role="button" ng-click="vm.confirmDeletion();"><span class="melon-icon-md melon-icon-trash"></span></a>
</span>

但是发生的事情是,即使 vm.project确实已定义,即 console.log($scope.project);产量undefined 。有趣的是,如果我简单地 console.log($scope);包含 project属性(property)与我需要的信息。我做错了什么?

我其实只需要项目的id值,所以我可以传递整个 project对象并访问其 id在指令中,或者以某种方式传递 id单独的数字。

最佳答案

当指令的链接函数开始执行时,vm.project 此时未定义。在 $scope.project 上设置监视。

内部指令:

$scope.$watch('project', function (newValue, oldValue) {
    if (newValue) {
        // do stuff
    }
});

关于javascript - Angular 指令 "="值绑定(bind)到范围,但未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34945890/

相关文章:

javascript - AngularJS ng-repeat jQuery find 仅返回一个元素

javascript -\n 换行符不适用于 Javascript

javascript - 在页面上显示 JSON?

javascript - 使用 <a> 标签提交表单

ruby-on-rails - 在 angularjs 上创建的网站的 Seo(谷歌不插入 angularjs 表达式)

javascript - div 上的 Angular 指令,元素没有焦点方法

javascript - 从 Siemens S7 1500 PLC 上的 Web 服务器页面读取 JSON 结构

angularjs - UI 路由器条件 ui View ?

javascript - 如何将 Soundcloud API(身份验证)与 Angular.js 一起使用

javascript - 从 Angular 指令将变量注入(inject) Angular Controller