Angularjs 动态更改应更改指令内容的自定义指令属性值

Angularjs 动态更改应更改指令内容的自定义指令属性值,angularjs,Angularjs,基本上,我已经制定了自定义指令,将Url作为字符串传递给该指令,然后在我调用的指令控制器中调用http.get()方法,该方法在该指令中创建内容。我想要的是能够更改annotation url属性的值,该属性反过来将更改指令内的内容,因为新url将返回不同的JSON对象。但是,当我从控制器更改annotationData时,该指令似乎没有得到刷新 HTML 指令: app.directive('ngAnnotate', function () { return { tem

基本上,我已经制定了自定义指令,将Url作为字符串传递给该指令,然后在我调用的指令控制器中调用
http.get()
方法,该方法在该指令中创建内容。我想要的是能够更改
annotation url
属性的值,该属性反过来将更改指令内的内容,因为新url将返回不同的
JSON
对象。但是,当我从控制器更改
annotationData
时,该指令似乎没有得到刷新

HTML

指令:

app.directive('ngAnnotate', function () {
    return {
        templateUrl: 'templates/...',
        restrict: 'E',
        scope: {
            annotationUrl: "@"

        },
        controller: ['$scope', '$http', function ($scope, $http) {

            $http.get($scope.annotationUrl).then(function (response) {
                $scope.data = response.data;
                 ...
                 ...

首先,我建议你换成

scope: {
    annotationUrl: "="
}
您可以添加一个监视程序,以便在值更改时调用
$http

$scope.$watch('annotationUrl', function(newVal, oldVal) {
    if (newVal != oldVal) {
       $http.get(newVal).then(function (response) {
            $scope.data = response.data;
             ...
             ...
    }
}
但是,如果希望保持
注释URL
的原样,则需要使用
$attr.$observe('annotationUrl',fn)
捕获值更改。

首先,我建议您更改为

scope: {
    annotationUrl: "="
}
您可以添加一个监视程序,以便在值更改时调用
$http

$scope.$watch('annotationUrl', function(newVal, oldVal) {
    if (newVal != oldVal) {
       $http.get(newVal).then(function (response) {
            $scope.data = response.data;
             ...
             ...
    }
}
但是,如果希望保持
注释URL
的原样,则需要使用
$attr.$observe('annotationUrl',fn)
捕获值更改。

首先,如果我将其更改为“=”,我必须传递对象而不是字符串,并删除http get并播放传递的对象。现在我想使用表示字符串URL的字符串。感谢您的回答,我将检查此属性。将observechange更改为
=
只需要您的模板更改
注释url=“annotatonData”
您仍然可以在您的指令中访问
$scope.annotationUrl
,感谢它工作正常,所以基本上我将所有内容都封装在InIt函数中,我在手表中调用它,并使用新值passed首先,如果我将其更改为“=”,我将必须传递对象而不是字符串,并删除http get并使用传递的对象。现在我想使用表示字符串URL的字符串。感谢您的回答,我将检查此属性。将observechange更改为
=
只需要您的模板更改
注释url=“annotatonData”
您仍然可以在您的指令中访问
$scope.annotationUrl
,感谢它工作正常,所以基本上我将所有内容都包装在InIt函数中,我在手表中调用它,并传递新值