将数据从控制器发送到指令

时间:2017-02-13 04:34:52

标签: angularjs directive

我想将它发送到我的指令,但如果控制器中的数据发生变化,我希望这些数据保持更新。

// Controller
angular
    .module('app')
    .controller('IndexController', IndexController)

IndexController.$inject = [];
function IndexController() {
    var vm = this;
    vm.name = 'John';

    newName = function() {
        vm.name = 'Brian';
    }
    newName();

}

// Directive
angular
    .module('app')
    .directive('userName', userName);

userName.$inject = ['$document'];

function userName($document) {

    var directive = {
        restrict: 'EA',
        template: '<div id="user"></div>',
        replace: true,
        scope: {
            name: '='
        },

        link: function(scope, elem, attrs) {
            console.log(scope.data);
        }
    }
    return directive;
}

这是我使用该指令的方式。问题是它总是在控制器中更改后返回名字而不是新名称。

<div ng-controller="indexController">
    <user-name name="indexController.name">
</div>
谢谢。

2 个答案:

答案 0 :(得分:1)

试试这个,你只需要将=IF(AND((B3>C3),(B3 < D3)),"yes","no") 注入$scope

&#13;
&#13;
Indexcontroller
&#13;
angular
    .module('app', [])
    .controller('IndexController', function($scope) {
    var vm = this;
    vm.name = 'John';

    vm.newName = function() {
        vm.name = 'Brian';
        console.log(vm.name);
    }
    //vm.newName();

})
 .directive('userName', ['$document', function() {

    var directive = {
        restrict: 'E',
        template: '<div id="user"></div>',
        replace: true,
        scope: {
            name: '='
        },

        link: function(scope, elem, attrs) {
            console.log(scope.name);
        }
    }
    return directive;
}])
&#13;
&#13;
&#13;

答案 1 :(得分:0)

  

在控制器中不使用as,您无法在范围内使用controller.prop

     

在controllery内部,您需要使用$scopethis来调用该方法。

  • 检查以下代码。

angular
    .module('app', [])
    .controller('IndexController', function($scope) {
    
    $scope.name = 'John';

    $scope.newName = function() {
        $scope.name = 'Brian';
    }
    $scope.newName();

})
 .directive('userName', ['$document', function() {

    var directive = {
        restrict: 'E',
        template: '<div id="user"></div>',
        replace: true,
        scope: {
            name: '='
        },

        link: function(scope, elem, attrs) {
            console.log(scope.name);
        }
    }
    return directive;
}])
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="IndexController">

<user-name name="name"></user-name>
</div>